Как уже отмечалось в других ответах, ваш конструктор создал новые локальные переменные, "затеняя" переменные экземпляра вместо заполнения переменных экземпляра данными.
Однако код заполнения немного отличается, если отделить объявление от заполнения, и они не совсем поняли это. У вас также был символ «+», который не принадлежал.
Этот код компилируется и работает (проверено), и делает в основном то, что вы ищете.
class Report
{
// declare instance variables (arrays)
public String[] departments;
public double[] grossTotals;
public double[] taxTotals;
// constructor
public Report(){
// populate instance variables
departments = new String[]{"Accounting", "Sales", "HR",
"Administration"} ;
grossTotals = new double[]{0.0, 0.0, 0.0, 0.0} ;
taxTotals = new double[]{0.0, 0.0, 0.0, 0.0} ;
} // END constructor
} // class Report
Вы можете альтернативно создать массивы в объявлении и затем заполнить записи массива в конструкторе или в другом месте.
При таком подходе код может выглядеть примерно так:
class Report
{
// declare instance variables (arrays)
public String[] departments = new String[4];
public double[] grossTotals = new double[4];
public double[] taxTotals = new double[4];
// constructor
public Report(){
// populate instance variable entries
departments[0] = "Accounting";
departments[1] = "Sales";
departments[2] = "HR";
departments[3] = "Administration";
for (int i = 0; i < 4; i++) {
grossTotals[i] = 0.0;
taxTotals[i] = 0.0;
}
} // END constructor
} // class Report
В качестве третьего варианта вы можете выполнить всю инициализацию в объявлении поля следующим образом:
class Report
{
// declare and populate instance variables (arrays)
public String[] departments = new String[]{"Accounting", "Sales", "HR",
"Administration"} ;
public double[] grossTotals = new double[]{0.0, 0.0, 0.0, 0.0} ;
public double[] taxTotals = new double[]{0.0, 0.0, 0.0, 0.0} ;
} // class Report
В этом случае вам вообще не нужно определять конструктор, поскольку он ничего не делает. Пустой будет предоставлен Java.