Ошибка конструктора по умолчанию, объявляющая значения - PullRequest
1 голос
/ 18 апреля 2020
public class Employee {

     public  Employee(){
        id=-1;
        year=-1;
        salary=-1; 
        name="NA";
        department="NA"; 
    }

    public  Employee(int id ,String name ,String department, int year,double salary){
        String s="Sales";
        String i="IT";
        String W="Warehouse";
        if(department.equals(W)) {
            this.department=department;}
        else 
            if(department.equals(s)) {
                this.department=department;}
            else 
                if(department.equals(i)) {
                    this.department=department;}
                else 
                    System.out.print("Department was not set"); 
    }

main

int input,id ,year ;
double salary;
String name ,department; 

System.out.print("Enter Employee 1 details (id, name, department, years, salary)");
id=kb.nextInt(); 
name=kb.next(); 
department=kb.next();
year=kb.nextInt(); 
salary=kb.nextDouble();  
Employee Employee=new Employee(id, name, department, year, salary);

Моя проблема в том, что я объявил значения в конструкторе по умолчанию, которые устанавливают

id=-1;
year=-1;
salary=-1; 
name="NA";
department="NA";

Но когда пользователь вводит недопустимые значения, он печатает ноль или 0

Я пытался использовать

Employee Employee=new Employee();
Employee=new Employee(id, name, department, year, salary);

, но это те же самые отпечатки null или 0. Любые идеи, где проблема

1 Ответ

1 голос
/ 18 апреля 2020

Включите вызов конструктора по умолчанию из конструктора всех аргументов.

public Employee(int id, String name, String department, int year, double salary) {
    this();
    // the rest

}

Проблема в том, что

new Employee()

и

new Employee(id, name, department, year, salary)

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

 this();

означало бы "заполнить значениями по умолчанию первыми".

Этот конструктор

 Employee(int id, String name, String department, int year, double salary)

также является проблемой. Это требует много аргументов, но работает с одним. Попробуйте установить их

this.id = id;
// and others

Условие проверки может быть упрощено

if (department.equals(W) || department.equals(s) || department.equals(i)) {
    this.department = department;
} else {
    // a message or exception 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...