运行应用程序时Java输出错误

时间:2016-07-20 02:02:57

标签: java intellij-idea runtime

我正在从我正在学习的这本书中做一些练习 练习如下:

创建一个名为Employee的类,它包含三个实例变量 - 第一个 name(类型String),姓氏(String)和月薪(double)。提供构造函数 初始化三个实例变量。为每个实例变量提供set和get方法。如果 月薪不积极,不设定其价值。编写名为EmployeeTest的测试应用程序 这表明了类Employee的功能。创建两个Employee对象并显示每个对象 年薪。然后给每位员工加薪10%,再次显示每位员工的年薪。

超类代码:

public class employee {

private String firstname;
private String lastname;
private double salary;
private double raise;

public employee(String firstname1, String lastname1, double salary1)
{
    firstname = firstname1;
    lastname = lastname1;
    salary = salary1;
}

public void setFirstname(String firstname1)
{
    firstname = firstname1;
}

public String getFirstname()
{
    return firstname;
}

public void setLastname(String lastname1)
{
    lastname = lastname1;
}

public String getLastname()
{
    return  lastname;
}

public void setSalary(double salary1)
{
    if(salary1 > 0)
    salary = salary1;
}

public double getSalary()
{
    return salary;
}


public double getRaise()
{
    salary = (salary * 10)/100 + salary;
    return salary;
}

}

子类的代码:

public class employeeTest {

public static void main(String[] args) {

    employee emp1 = new employee(null, null, 0);
    employee emp2 = new employee(null, null, 0);

    Scanner input = new Scanner(System.in);

    System.out.println("Enter the 1 employee first name: ");
    String fn1;
    fn1 = input.nextLine();
    emp1.setFirstname(fn1);
    emp1.getFirstname();


    System.out.println("Enter the 1 employee last name: ");
    String ln1;
    ln1 = input.nextLine();
    emp1.setLastname(ln1);
    emp1.getLastname();


    System.out.println("Enter the 1 employee yearly salary: ");
    double sl1;
    sl1 = input.nextDouble();
    emp1.setSalary(sl1);
    emp1.getSalary();
    System.out.printf("%s %s's yearly salary before the raise is %.2f\n", emp1.getFirstname(), emp1.getLastname(), emp1.getSalary());
    System.out.println();






    System.out.println("Enter the 2 employee first name:\n");
    String fn2;
    fn2 = input.nextLine();
    emp2.setFirstname(fn2);
    emp2.getFirstname();



    System.out.println("Enter the 2 employee last name: ");
    String ln2;
    ln2 = input.nextLine();
    emp2.setLastname(ln2);
    emp2.getLastname();


    System.out.println("Enter the 2 employee yearly salary: ");
    double sl2;
    sl2 = input.nextDouble();
    emp2.setSalary(sl2);
    emp2.getSalary();

    System.out.printf("%s %s's yearly salary before the raise is %.2f\n", emp2.getFirstname(), emp2.getLastname(), emp2.getSalary());

所以,当我运行它时,对于第一个雇员(obj emp1),我可以正确地指定名字和姓氏。但当它到达第二个员工时,它只打印出员工2的第二个名字输入的两倍,然后将第二个员工的姓氏分配给第一个员工的第一个名字,然后在他的工资之后

示例:

输入1名员工的名字: 约翰

输入1名员工姓氏: DOE

输入1名员工年薪: 100

John Doe在加薪前的年薪是100.00

输入2名员工名字://这里我不能输入employee2名字

输入2名员工姓氏: 米格尔

输入2名员工年薪: 200

米格尔在加薪前的年薪是200.00 他们获得了10%的加薪.....

John Miguel加薪后的薪水为:110.00 //姓名不正确

加薪后米格尔的薪水是:220.00 //正确的名字

处理完成,退出代码为0

请帮助

1 个答案:

答案 0 :(得分:0)

好吧,我相信你没有正确地消耗输入。例如,当你使用你的nextDouble()时,代码会在第一行留下一个/ n分隔符,所以之后的nextLine()只会在设置emp2的名字时使用它。因此,这使得emp2的名字为空。解决这个问题的方法就是在nextDouble()之后有一个nextLine(),以便不在那里留下分隔符。

如果您感到困惑,请阅读this