我正在编写一个相当简单的程序,只输出2名员工的姓名,他们的薪水,以及10%的薪水。 我有2个问题:1)工资打印为'$ 0.000000'2)Ii无法使加注方法正常工作
这是我的代码:
public class Employee {
// instance variable
private String name;
private String lastName;
private double salary;
// setters
public String getLastName() { return lastName; }
public String getName() { return name; }
public double getSalary() { return salary; }
public void raise(double raise) { salary = salary + (salary * .1); }
// getters
public Employee(String name, String lastName, double salary) {
this.name = name;
this.lastName = lastName;
if (salary > 0.0) {
this.salary = salary;
}
}
}
public class EmployeeTest {
public static void main(String[] args) {
Employee raise1 = new Employee("Betty", "Jones", 4000.0);
Employee raise2 = new Employee("Sally", "Mae", 6000.0);
// Print statements for the employee's name and salary
System.out.printf("Employee #1\nFirst Name: %s\nLast Name: %s\n\n" + "Salary: $%f", raise1.getName(), raise1.getLastName(), raise1.getSalary());
// THIS IS WHERE I'M HAVNG TROUBLE
System.out.printf("Her raise will be: %d", raise1.raise(salary));
System.out.printf("Employee #1\nFirst Name: %s\nLast Name: %s\n\n" + "Salary: %f", raise1.getName(), raise1.getLastName(), raise1.getSalary());
raise2.raise(salary);
}
}
提前感谢您的帮助!
答案 0 :(得分:2)
工资打印$ 0.00000的原因是因为您出于某种原因放置 if 语句而不是仅仅设置您传递给构造函数的工资。第二件事,void方法不会返回任何原因,因为raise方法没有按照你想要的方式工作。我为你修好了,所以看看,希望我能帮助你理解你哪里出错了,如果你有任何问题,请随时问我在这里等你。
员工测试类:
public class EmployeeTest {
public static void main(String[] args) {
Employee raise1= new Employee("Betty","Jones",4000.0);
Employee raise2= new Employee("Sally","Mae",6000.0);
//Print statements for the employee's name and salary
System.out.printf("Employee #1\nFirst Name: %s\nLast Name: %s\n\n" +
"Salary: $%.2f",
raise1.getName(),
raise1.getLastName(),
raise1.getSalary());
System.out.printf("\nHer raise will be: $%.2f",
raise1.raise(raise1.getSalary()));
System.out.printf("\n\nEmployee #2\nFirst Name: %s\nLast Name: %s\n\n" +
"Salary: $%.2f",
raise2.getName(),
raise2.getLastName(),
raise2.getSalary());
System.out.printf("\nHer raise will be: $%.2f\n",
raise2.raise(raise2.getSalary()));
}
}
员工类:
public class Employee {
//instance variable
private String name;
private String lastName;
private double salary;
//getters
public String getLastName() {
return lastName;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public double raise(double raise){
salary = salary + (salary*.1);
return salary;
}
//constructor
public Employee(String name, String lastName, double salary){
this.name = name;
this.lastName = lastName;
this.salary = salary;
}
}
打印上述程序的输出:
员工#1
名字:贝蒂
姓氏:琼斯
薪水:$ 4000.00
她的加薪将是:4400.00美元
员工#2
名字:莎莉
姓氏:Mae
薪水:$ 6000.00
她的加薪将是:$ 6600.00
答案 1 :(得分:0)
您的raise()
方法的返回类型为void,这意味着它根本不会返回任何内容。将返回类型更改为double
,只需在结尾键入return this.salary
即可。它应该是这样的:
public double raise(double salary)
{
this.salary = salary + (salary * 0.1);
return this.salary;
}
this
关键字引用您正在使用的对象的实例。简单地说,您可能希望引用类salary
变量,而不是方法中传递的参数,否则它将引用传入的参数。
您还需要在构造函数中调用this.salary = salary;
,因为之前分配的唯一方法是salary
低于零,但4000不低于零。
答案 2 :(得分:0)
当你这样做时
Employee raise1= new Employee("Betty","Jones",4000.0);
您调用具有以下条件的Employee
类的构造函数:
if (salary <0.0){
this.salary = salary;
}
由于4000.0
超过0
,因此永远不会被分配。