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

首次在JAVA中使用方法和构造函数,在程序中接收错误以确定加薪,java,methods,constructor,setter,getter,Java,Methods,Constructor,Setter,Getter,我正在编写一个相当简单的程序,只需输出两名员工的姓名、工资以及工资的10%。 我有两个问题:1)工资打印为“$0.000000”2)我无法使加薪方法正常工作 这是我的密码: public class Employee { // instance variable private String name; private String lastName; private double salary; // setters public St

我正在编写一个相当简单的程序,只需输出两名员工的姓名、工资以及工资的10%。 我有两个问题:1)工资打印为“$0.000000”2)我无法使加薪方法正常工作

这是我的密码:

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);
    }
}
提前感谢您的帮助

您的
raise()
方法的返回类型为void,这意味着它根本不会返回任何内容。将返回类型更改为双倍,只需键入
返回此项。最后的工资
应该可以。应该是这样的:

public double raise(double salary)
{
    this.salary = salary + (salary * 0.1); 
    return this.salary;
}
this
关键字引用您正在使用的对象的实例。简单地说,您可能希望引用class
salary
变量,而不是方法中传递的参数,否则它将引用传入的参数

你还需要调用
this.salary=salary
在构造函数中,因为以前分配它的唯一方法是
salary
低于零,但4000不低于零

当你这样做的时候

Employee raise1= new Employee("Betty","Jones",4000.0);
调用具有以下条件的
Employee
类的构造函数:

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

if(salarysalary打印$0.00000的原因是因为您出于某种原因放置了if语句,而不是仅仅设置传递给构造函数的salary。第二件事,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;

    }

}
员工类别:

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;

    }

}
打印上述程序的输出:

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美元

她的加薪是:4400美元

员工#2

名字:莎莉

姓:梅

薪金:6000美元


她的加薪将是:$6600.00

你的“getter”和“setters”评论有点……误导性。你的
raise
方法是
void
类型,这意味着它不会向你的
系统.out.printf
行返回任何内容。
如果(工资1.如PM77-1所述,您编写了代码以防止工资被初始化。2.什么是“正确的”你的
raise
方法应该如何工作?我只是在解释我正在使用的书中的问题时有错误的逻辑。它说如果工资低于0,就不要传递它。我还想知道我如何修正关于加薪的打印声明。我编辑了上面的代码以显示我的更改,这就是我刚刚编辑它的原因。我意识到这个错误或者。仍然无法解决问题。零的110%仍然是零。该方法很好。不是在上下文中使用它。他在
printf
语句中使用它,这要求返回类型不是void,而是void,以便它实际显示某个内容。
System.out.printf(“她的加薪将是:%d”,raise1.raise(salary))
查看他的main()方法。非常感谢。这是我第一次用Java编写代码,我还不熟悉语法。