java - 如何更新 if block 中的实例变量?

标签 java oop

我正在为一门类(class)编写代码,该类(class)要求用户输入有关员工的数据。我的任务中要求多种员工类型,其中一种是受薪员工,可以获得可选奖金,使其工资增加 10%。

我的问题是,员工的工资没有在我创建的 if block 内按预期更新。顺便说一句,我为奖金创建实例变量的原因是,作为我的类(class)作业的规范,奖金应该在任何时候都可以删除。

下面是 Employee 父类(super class)和 Salaried 子类的构造函数,以及用于实例变量“pay”的 setter

public static class Employee{
    double pay;


    public void setPay(double p){
            pay = p;
    }

    public double getPay(){
            return pay;
    }

    public Employee(){
    }    
}

public static class Salaried extends Employee{
    private boolean bonus;

    public void setBonus(boolean b){
        bonus = b;
    }

    public Salaried(){
        super();
        System.out.println("What is this employees salary?");
        Scanner sc1 = new Scanner(System.in);
        double p = sc1.nextDouble();
        System.out.println("Give this employee a bonus? Y/N");
        if (sc1.nextLine().equalsIgnoreCase("Y")){
            setBonus(true);
        }
        else if (sc1.nextLine().equalsIgnoreCase("N")){
            setBonus(false);
        }
        if (bonus){
            setPay(p * 1.1);
        }
        else{
            setPay(p);
        }
}

在创建受薪员工并输入例如 10000 作为工资并对有关奖金的问题回答“Y”时,当我尝试使用 getter 检索 pay 实例变量时,我预计会得到 11000,但相反获得 10000,就好像奖金从未应用过一样。我不明白为什么会发生这种情况。

最佳答案

每次调用sc1.nextLine()时,它都会消耗一行,并且在设置bonus时调用它两次(第一次,“Y”是已跳过,因为 sc1.nextDouble() 留下尾随新行)。无论如何,您不需要 if/else 检查来更新 boolean 字段。比如,

public Salaried() {
    super();
    System.out.println("What is this employees salary?");
    Scanner sc1 = new Scanner(System.in);
    double p = sc1.nextDouble();
    sc1.nextLine(); // <-- consume trailing new line.
    System.out.println("Give this employee a bonus? Y/N");
    bonus = sc1.nextLine().equalsIgnoreCase("Y"); // <-- just set bonus.
    if (bonus) {
        setPay(p * 1.1);
    } else {
        setPay(p);
    }
}

关于java - 如何更新 if block 中的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57301400/

相关文章:

java - Tomcat 7 慢启动元数据完整 ="true"web.xml

codeigniter - 为什么 Codeigniter 有一个只有构造函数和 get 的 Model 类?

java - 具有默认级别访问权限的类内部公共(public)方法有什么用?

oop - 如何在对象数据库中设计多对多关系?

c - 使用 C 语言进行数据封装的 OOP 编程

java - 使用关键字 "this"访问实例函数或成员是一种好习惯吗?

java - 如何在j2me中使一些文本框彼此相邻

java - 如何遍历不断增长的java列表

java - 是否可以优化此功能?

python - 为selenium添加时间延迟