-2

我需要帮助来修复我的代码。我不知道问题出在哪里,但是printf当我运行此代码时,编译器似乎给了我错误。为什么?

Employee  emp1 = new Employee();
emp1.setFname("Kim");
emp1.setLname("Yee");
emp1.setID(101);
emp1.setSalary(40000);

Employee  emp2 = new Employee();
emp2.setFname("Lana");
emp2.setLname("Yum");
emp2.setID(102);
emp2.setSalary(55.000);

Employee  emp3 = new Employee();
emp3.setFname("Alex");
emp3.setLname("Jhone");
emp3.setID(103);
emp3.setSalary(55.500);

Employee  emp4 = new Employee();
emp4.setFname("joe");
emp4.setLname("mac");
emp4.setID(104);
emp4.setSalary(74.000);

System.out.println("Employee Name \t Employee ID \t Employee salary");  

System.out.printf("%s %s\t%d\t$%f\n", emp1.getFname() + "" + emp1.getLname(), emp1.getID(), emp1.getSalary());
System.out.printf("%s %s\t%d\t$%f\n", emp2.getFname() + "" + emp2.getLname(), emp2.getID(), emp2.getSalary());
System.out.printf("%s %s\t%d\t$%f\n", emp3.getFname() + "" + emp3.getLname(), emp3.getID(), emp3.getSalary());
System.out.printf("%s %s\t%d\t$%f\n", emp4.getFname() + "" + emp4.getLname(), emp4.getID(), emp4.getSalary());
4

3 回答 3

1

@Nishant Shreshth 和 @hexafraction 是对的。然而,你还没有把问题想透。任何时候你有这样的重复代码,你就错失了一个机会。为什么不写一个方法Employee来返回员工的全名呢?您肯定会在实际程序中找到更多使用它的地方。

public String getFullName() {
    return fname + " " + lname;
}

一个人应该避免苦差事。请记住 Larry Wall 的编程三大美德:狂妄、急躁和懒惰。你现在应该做额外的工作,这样你以后就可以偷懒了。

现在,一个人的名字和姓氏之间的联系比与他的身份和薪水更相关。此外,即使不是员工,人们也有名字。因此,您应该真正创建一个Name类并在Employee(or Person, or Student, or Customer...) 中使用它而不是fnameand lname。然后,您可以在需求发生变化时对其进行更改。将middleInitial添加到所有保留名称组件的类中会有多困难?什么标题?什么后缀?您现在可能没有要求这样做,但这是一个判断为未来准备多少的问题。

如果您成为 Java 程序员,您可能还希望您的类实现java.util.Formattable. 那是一个高级话题。

于 2013-10-17T01:15:44.607 回答
1
System.out.printf("%s %s\t%d\t$%f\n", emp1.getFname()+""+emp1.getLname(), emp1.getID(),emp1.getSalary());

这是罪魁祸首:

emp1.getFname()+""+emp1.getLname()

上面的那个表达式是一个字符串。利用:

System.out.printf("%s\t%d\t$%f\n", emp1.getFname()+""+emp1.getLname(), emp1.getID(),emp1.getSalary());

或者

System.out.printf("%s %s\t%d\t$%f\n", emp1.getFname(), emp1.getLname(), emp1.getID(),emp1.getSalary());

所以你在格式字符串中有匹配数量的参数和格式说明符。

于 2013-10-17T00:39:35.250 回答
0

我认为+""+应该只是一个,

于 2013-10-17T00:39:52.930 回答