java проблема с переменной экземпляра класса и конструктором

60
9

Я пробовал свой мозг по этому поводу и пытался заниматься исследованиями, но то, что я нашел, еще не помогло мне взломать его. Я нахожусь в этом вопросе, надеясь, что кто-то может помочь мне указать на ясное направление или показать мне, что я делаю неправильно и недоразумение. Кажется, у меня возникли проблемы с пониманием и работой с конструкторами и параметрами для нового экземпляра класса. Пожалуйста, обратите внимание, что я просто учился, поэтому извиняюсь, если мог использовать неправильные условия.

public class CommissionCalculation 
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in); // create scanner for user input from command window
Employee employee = new Employee(employee.name, employee.totalSales, employee.totalIncome); //create instance of employee class

Конкретной ошибкой, которую я получаю, является параметр instance employee.name, в котором говорится: "Переменный сотрудник, возможно, не был инициализирован". Однако employee.totalSales и employee.totalIncome не имеют этой проблемы.

Я пытаюсь передать эти параметры в ArrayList как вы можете видеть ниже.

  ArrayList <Employee> employeeList = new ArrayList<>();//create arraylist of employee class        
employeeList.add(new Employee(employee.name, employee.totalSales, employee.totalIncome));

код класса

class Employee //creates new class 
{
String name;
double totalSales;
double totalIncome;

public Employee(String Name, double TotalSales, double TotalIncome)
{
this.name = Name;
this.totalSales = TotalSales;
this.totalIncome = TotalIncome;
}

public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}

public double getTotalSales()
{
return totalSales;
}
public void setTotalSales(double totalSales)
{
this.totalSales = totalSales;
}

public double getTotalIncome()
{
return totalIncome;
}
public void setTotalIncome(double totalIncome)
{
this.totalIncome = totalIncome;
}

public String toString()
{
return "Name: "+ this.name + "\nTotal Annual Sales: "+ this.totalSales + "\nTotal Income Earned:" + this.totalIncome;
}
}

Вся помощь и предложения очень ценятся!

спросил(а) 2015-06-02T07:06:00+03:00 4 года, 6 месяцев назад
3
Решение
54

Когда вы пишете Employee employee = new Employee(employee.name, employee.totalSales, employee.totalIncome), employee.name - это имя сотрудника, которого вы в настоящее время строите.

Вы в основном говорите: "Имя этого сотрудника должно быть именем этого сотрудника", а затем Java спрашивает "Но как называется этот сотрудник?".

Если вы вызываете такой конструктор, вы должны вызвать его с конкретным значением (или переменной, которая уже имеет значение), например, Employee employee = new Employee("John Doe", "245", "1234.56")

Если вы просто хотите создать пустой сотрудник, вам нужно будет иметь такой конструктор:

public Employee() {
}

Это позволит вам установить значения позже. Вы также можете добавить значения по умолчанию к переменным внутри него, если хотите. Вы можете вызвать конструктор следующим образом:

Employee employee = new Employee();

Кстати, если вы вообще не определяете какие-либо конструкторы, этот будет добавлен по умолчанию. (В этом случае он называется "конструктором по умолчанию".)

ответил(а) 2015-06-02T07:14:00+03:00 4 года, 6 месяцев назад
Еще 2 ответа
32

Я получаю параметр экземпляра employee.name, в котором говорится: "Переменный сотрудник, возможно, не был инициализирован". Однако employee.totalSales и employee.totalIncome не имеют этой проблемы.

Если вы предоставите действительные параметры, вы получите ошибку времени компиляции для других двух параметров.


Demo.java:3: error: variable employee might not have been initialized
Employee employee = new Employee(null, employee.totalSales, employee.totalIncome);
^
Demo.java:3: error: variable employee might not have been initialized
Employee employee = new Employee(null, 0, employee.totalIncome);
^

Как было предложено @Jake, имеет конструктор по умолчанию и инициализирует поля работника.

ответил(а) 2015-06-02T07:47:00+03:00 4 года, 6 месяцев назад
32

Я думаю, вы найдете employee.totalSales, а employee.totalIncome имеет ту же проблему: попробуйте заменить employee.name на "Fred", и вы увидите, что синтаксическая ошибка переходит к следующему аргументу. Проблема в том, что значение, которое вы передаете конструктору, должно иметь значение перед вызовом конструктора. Переменная employee еще не была инициализирована, поэтому они не имеют значения - это то, что компилятор сообщает вам в синтаксической ошибке.

ответил(а) 2015-06-02T07:13:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема