我正在从我正在学习的这本书中做一些练习 练习如下:
创建一个名为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
请帮助
答案 0 :(得分:0)
好吧,我相信你没有正确地消耗输入。例如,当你使用你的nextDouble()时,代码会在第一行留下一个/ n分隔符,所以之后的nextLine()只会在设置emp2的名字时使用它。因此,这使得emp2的名字为空。解决这个问题的方法就是在nextDouble()之后有一个nextLine(),以便不在那里留下分隔符。
如果您感到困惑,请阅读this。