Java 为什么我的if/else声明被忽略?

Java 为什么我的if/else声明被忽略?,java,eclipse,if-statement,Java,Eclipse,If Statement,因此,我将在麻省理工学院开放式课程中介绍java 6.092。我正在上第二课,但我尝试的东西似乎都不能使程序正常工作 我甚至注意到,在第3课开始的第2课复习中提供的代码版本也有类似的问题。[编辑]-课程中的代码不完整,因为我忘记添加变量 员工每小时最多可获得40小时的工资(工作小时数)×(基本工资)。 每超过40小时,他们就会得到加班费=(基本工资)×1.5。 基本工资不得低于最低工资(每小时8美元)。 如果是,则打印一个错误。如果小时数大于60,则打印错误消息 以下是我尝试的解决方案: pub

因此,我将在麻省理工学院开放式课程中介绍java 6.092。我正在上第二课,但我尝试的东西似乎都不能使程序正常工作

我甚至注意到,在第3课开始的第2课复习中提供的代码版本也有类似的问题。[编辑]-课程中的代码不完整,因为我忘记添加变量

员工每小时最多可获得40小时的工资(工作小时数)×(基本工资)。
每超过40小时,他们就会得到加班费=(基本工资)×1.5。
基本工资不得低于最低工资(每小时8美元)。
如果是,则打印一个错误。如果小时数大于60,则打印错误消息

以下是我尝试的解决方案:

public static void main(String[] arguments) {
    int startOT = 40; 
    int maxH = 60;
    double otPay = 1.5;
    int emp1Hours = 35, emp2Hours = 47, emp3Hours = 73;
    double emp1Pay = 7.50, emp2Pay = 8.20, emp3Pay = 10.00;

    double swer;
    if (emp1Hours > startOT){
        swer = emp1Pay * startOT + (emp1Pay * otPay) * (emp1Hours - startOT);
        System.out.println("Employee John Doe makes " + "$" + swer + " this week!");
    }else if (emp1Hours > maxH){
        System.out.println("@John Doe ERROR! Hours worked is invalid!");
    }
    else if (emp1Pay < 8){
        System.out.println("Invalid hourly pay ;(");
    }
    else {
        swer = emp1Pay * emp1Hours;
        System.out.println("Employee John Doe makes " + "$" + swer + " this week!");
    }

    double swerzie;
    if (emp2Hours > startOT){
        swerzie = emp2Pay * startOT + (emp2Pay * otPay) * (emp2Hours - startOT);
        System.out.println("Employee Jane Doe makes " + "$" + swerzie + " this week!");
    }else if (emp2Hours > maxH){
        System.out.println("@Jane Doe ERROR! Hours worked is invalid!");
    }
    else if (emp2Pay < 8){
         System.out.println("Invalid hourly pay ;(");
    }
    else {
        swerzie = emp2Pay * emp2Hours;
        System.out.println("Employee Jane Doe makes " + "$" + swerzie + " this week!");
    }

    double answer;
    if (emp3Hours > startOT){
        answer = emp3Pay * startOT + (emp3Pay * otPay) * (emp3Hours - startOT);
        System.out.println("Employee malcom smith makes " + "$" + answer + " this week!");
    }else if (emp3Hours == 73){
        System.out.println("@malcom smith ERROR! Hours worked is invalid!");
    }
    else if (emp3Pay < 8){
         System.out.println("Invalid hourly pay ;("); }
    else {
        answer = emp3Pay * emp3Hours;
        System.out.println("Employee malcom smith makes " + "$" + answer + " this week!");
    }
}

代码的第一部分看起来不错:

 double emp1Pay = 7.50,...
 ...
 if (emp1Hours > startOT){
   ...
 else if (emp1Pay < 8){ System.out.println("Invalid hourly pay ;("); }
double emp1Pay=7.50,。。。
...
如果(emp1Hours>startOT){
...
如果(emp1Pay<8){System.out.println(“无效时薪;(”);}
如果emp1Pay是的话,这会精确地打印出您所期望的内容。请看,您的代码复制了(三次复制)所有逻辑和计算,呃,这是次优的

设想一个过程,它以
工作小时数
基本工资
为参数,打印所得金额或错误消息,然后对三名不同的员工应用三次

大致如下:

from java.math import BigDecimal; // money is never float or double.

public static void calculateWage(String name, BigDecimal hourly_rate, int hours) {
    final int OVERTIME_THRESHOLD = 40;
    final int HOURS_LIMIT = 60;
    final BigDecimal MIN_HOURLY_RATE = new BigDecimal("8.00"); 
    // ^^^ again, never store money in a floating point form!


    if (hours > HOURS_LIMIT) {
        // what do you do?
    }

    if (hourly_rate.compareTo(MIN_HOURLY_RATE) < 0) { // less than
        // what do you do?
        // now think how to merge it with previous
    }

    if (hours > OVERTIME_THRESHOLD) {
        int overtime = hours - OVERTIME_THRESHOLD;
        // calculate two values and sum them up
    }
    else { // no overtime
        // calculate just one value
    }
}

public static void main(String[] args) {
    calculateWage("John", new BigDecimal("7.50"), 73);
    calculateWage("Jane", /* well, you see*/);
}
from java.math import BigDecimal;//货币从来不是浮点数或双精度的。
公共静态void calculateWage(字符串名称、BigDecimal小时费率、整数小时){
最终int超时_阈值=40;
最终整数小时限制=60;
最终BigDecimal最小小时费率=新BigDecimal(“8.00”);
//^^^^同样,千万不要以浮点形式存储货币!
如果(小时>小时限制){
//你是做什么的?
}
如果(小时费率)与(最低小时费率)<0相比{//小于
//你是做什么的?
//现在想一想如何将它与以前的合并
}
如果(小时数>加班时间\u阈值){
int加班=小时-加班时间\u阈值;
//计算两个值并求和
}
否则{//不加班
//只计算一个值
}
}
公共静态void main(字符串[]args){
calculateWage(“约翰”,新的大十进制(“7.50”),73);
计算网页(“简”/*嗯,你看*/);
}

这段代码不是更可读、更简洁吗?你的代码也可以。

你的代码没有编译,当我修复它进行编译时,我得到的是
无效的小时工资;(
。那么你预计会发生什么?麻省理工学院作业中的实际问题是什么?如果这不是完整的代码,请给我们更多的东西来处理。你的问题是你正在硬编码一个值集,而不是循环三个值集。你没有努力提供一个。请减少你的代码!我强烈建议强制你选择f从现在开始做两件事:1)给你的变量起更多有意义的名字,2)注意你如何格式化你的代码。如果你必须在六个月后回来看看这个,你知道什么是
swerzie=emp2Pay*startOT+(emp2Pay*otPay)*(emp2Hours-startOT)
意思是?这只是一个介绍课程,你为自己做这件事真是太棒了,但是现在试着把这些习惯灌输给你自己。如果你说你的程序没有达到你想要的效果,请同时说明你期望的结果。你也应该让小时工资参数成为一个大整数。
from java.math import BigDecimal; // money is never float or double.

public static void calculateWage(String name, BigDecimal hourly_rate, int hours) {
    final int OVERTIME_THRESHOLD = 40;
    final int HOURS_LIMIT = 60;
    final BigDecimal MIN_HOURLY_RATE = new BigDecimal("8.00"); 
    // ^^^ again, never store money in a floating point form!


    if (hours > HOURS_LIMIT) {
        // what do you do?
    }

    if (hourly_rate.compareTo(MIN_HOURLY_RATE) < 0) { // less than
        // what do you do?
        // now think how to merge it with previous
    }

    if (hours > OVERTIME_THRESHOLD) {
        int overtime = hours - OVERTIME_THRESHOLD;
        // calculate two values and sum them up
    }
    else { // no overtime
        // calculate just one value
    }
}

public static void main(String[] args) {
    calculateWage("John", new BigDecimal("7.50"), 73);
    calculateWage("Jane", /* well, you see*/);
}