2015-06-02 2 views
2

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

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 

Специфическая ошибка я получаю это параметр экземпляра employee.name, который говорит: «Variable работник не может быть инициализирован.» Однако 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; 
    } 
} 

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

+0

Я думаю, вы найдете employee.totalSales и employee.totalIncome имеют ту же проблему: попробуйте заменить employee.name на «Fred», и вы увидите, что ошибка синтаксиса переходит к следующему аргументу. – sprinter

ответ

0

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

2

Когда вы пишете 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(); 

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

0

Я получаю это параметр экземпляра employee.name, который говорит «Variable работник не может быть инициализирован.» Тем не менее, employee.totalПродажа и 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, создайте конструктор по умолчанию и инициализируйте поля работника.

Смежные вопросы