繁体   English   中英

首次在JAVA中使用方法和构造函数,接收程序中的错误以确定加注

[英]First time using methods and constructors in JAVA, recieving errors in a program to determine raises

我正在编写一个相当简单的程序,只输出2个员工的姓名,他们的薪水,以及10%的薪水。 我有两个问题: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.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美元

你的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不低于零。

当你这样做

Employee raise1= new Employee("Betty","Jones",4000.0);

您调用具有以下条件的Employee类的构造函数:

 if (salary <0.0){
     this.salary = salary;
 }

由于4000.0大于0 ,因此永远不会被分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM