Witam, jestem początkującym użytkownikiem Javy. Uczę się jej sam w domu w wolnym czasie i postanowiłem zacząć pisać program w stylu organizatora finansów (dodawanie przychodów, wydatków itp.). W programie w klasie DataBase mam metodę dodającą przychód do tablicy oraz metodę, dzięki której dla każdego elementu przypisanego do tablicy zostanie potem wyświetlona informacja o nim, natomiast w klasie Control jest ona wywoływana w przypadku wybrania opcji nr 2.
klasa DataBase:
public class DataBase {
public static final int MAX_INCOME_NUMBER = 10000;
private Income[] incomes;
private int incomeNumber;
public int getIncomeNumber() {
return incomeNumber;
}
public Income[] getIncomes() {
return incomes;
}
public DataBase() {
incomes = new Income[MAX_INCOME_NUMBER];
}
public void addIncome(Income income) {
if(incomeNumber < MAX_INCOME_NUMBER) {
incomes[incomeNumber] = income;
incomeNumber++;
} else {
System.out.println("Maksymalna liczba przychodów została osiągnięta");
}
}
public void printIncome() {
if(incomeNumber == 0) {
System.out.println("Brak przychodów");
} else {
for(int i=0; i<incomeNumber; i++) {
getIncomes()[i].printInfo();
}
}
}
}
klasa Control
public class Control {
public static final int EXIT = 0;
public static final int ADD_INCOME = 1;
public static final int PRINT_INCOME = 2;
private AddData addData;
private DataBase dataBase;
public Control() {
addData = new AddData();
dataBase = new DataBase();
}
public void addIncome() {
Income income = addData.createIncome();
dataBase.addIncome(income);
}
public void printIncome() {
dataBase.printIncome();
}
public void printOptions() {
System.out.println("0 - wyjście z programu");
System.out.println("1 - dodaj przychód");
System.out.println("2 - pokaż przychody");
}
public void ControlLoop() {
int option;
printOptions();
while((option = addData.getOption()) != EXIT) {
switch(option) {
case ADD_INCOME:
addIncome();
break;
case PRINT_INCOME:
printIncome();
break;
default:
System.out.println("Nie ma takiej opcji");
}
printOptions();
}
addData.close();
}
}
Chciałem przenieść metodę printIncome z klasy DataBase do zupełnie innej klasy (np. klasa Info) i następnie wywołać ją w klasie DataBase po wybraniu opcji 2. Wszystko wydaje się spoko, program się kompiluje jednak po dodaniu przychodu a następnie wybraniu opcji wyświetlenia go cały pokazywany jest napis "Brak przychodów" zamiast dodanego przychodu. Chciałem się spytać gdzie popełniam błąd i czy jest możliwe (i czy w ogóle ma sens) wydzielenie tej metody do osobnej klasy.
klasa Info
public class Info {
private DataBase db;
public Info() {
db = new DataBase();
}
public void printIncome() {
if(db.getIncomeNumber() == 0) {
System.out.println("Brak przychodów");
} else {
for(int i=0; i<db.getIncomeNumber(); i++) {
db.getIncomes()[i].printInfo();
}
}
}
}