在Java中使用switch的问题
我不明白为什么它总是返回arg1的值。我正在建造一个重量转换器在Java中使用switch的问题,java,logic,switch-statement,Java,Logic,Switch Statement,我不明白为什么它总是返回arg1的值。我正在建造一个重量转换器 public double convert(double arg1,int arg2,int arg3) { // arg1 = amount, arg2 = from, arg3 = to double milligram = 1; double gram = 1000; double ounce = 28349.5; double pound = 453592; double an
public double convert(double arg1,int arg2,int arg3) {
// arg1 = amount, arg2 = from, arg3 = to
double milligram = 1;
double gram = 1000;
double ounce = 28349.5;
double pound = 453592;
double answer = 0;
switch(arg2) {
case 0: switch(arg3) { // if milligram
case 0: answer = (arg1 * milligram) / milligram;
case 1: answer = (arg1 * milligram) / gram;
case 2: answer = (arg1 * milligram) / ounce;
case 3: answer = (arg1 * milligram) / pound;
}
case 1: switch(arg3) { // if gram
case 0: answer = (arg1 * gram) / milligram;
case 1: answer = (arg1 * gram) / gram;
case 2: answer = (arg1 * gram) / ounce;
case 3: answer = (arg1 * gram) / pound;
}
case 2: switch(arg3) { // if ounce
case 0: answer = (arg1 * ounce) / milligram;
case 1: answer = (arg1 * ounce) / gram;
case 2: answer = (arg1 * ounce) / ounce;
case 3: answer = (arg1 * ounce) / pound;
}
case 3: switch(arg3) { // if pound
case 0: answer = (arg1 * pound) / milligram;
case 1: answer = (arg1 * pound) / gram;
case 2: answer = (arg1 * pound) / ounce;
case 3: answer = (arg1 * pound) / pound;
}
} // end arg2 switch
return answer;
}
我把我的逻辑搞砸了,但我不知道在哪里。
任何帮助都将不胜感激。您缺少
break
语句:
case 0:
answer = (arg1 * milligram) / milligram;
break;
...
您缺少
break
语句:
case 0:
answer = (arg1 * milligram) / milligram;
break;
...
嵌套的case语句很难阅读,也很难调试。最好将您需要的功能封装到方法调用中
也就是说,在交换机的任何地方都没有
break
语句。不管是哪种情况,它都会一直到最后一种情况(将答案设置为该情况的底部)。嵌套的case语句很难阅读,也很难调试。最好将您需要的功能封装到方法调用中
也就是说,在交换机的任何地方都没有
break
语句。不管是哪种情况,它都会一直延续到最后一种情况(将答案设置为与案例底部相等)。像这样重写每个案例
case 2: switch(arg3) { // if ounce
case 0: answer = (arg1 * ounce) / milligram;break;
case 1: answer = (arg1 * ounce) / gram;break;
case 2: answer = (arg1 * ounce) / ounce;break;
case 3: answer = (arg1 * ounce) / pound;break;
像这样重写每一个案例
case 2: switch(arg3) { // if ounce
case 0: answer = (arg1 * ounce) / milligram;break;
case 1: answer = (arg1 * ounce) / gram;break;
case 2: answer = (arg1 * ounce) / ounce;break;
case 3: answer = (arg1 * ounce) / pound;break;
您应该在switch语句中使用
break
,否则您的结果可能会被降级您应该在switch语句中使用break
,否则您的结果可能会被降级,而不是使用break
,使用return
语句不仅可以实现这一点,还可以防止案例失败
case 2: switch(arg3) { // if ounce
case 0: return (arg1 * milligram) / milligram;
除了使用
break
之外,使用return
语句不仅可以实现这一点,还可以防止案例失败
case 2: switch(arg3) { // if ounce
case 0: return (arg1 * milligram) / milligram;
为什么不直接命名参数amount、from和to呢?在这种情况下,最好使用数组并删除所有开关。类似于
answer=(arg1*conv[arg2])/conv[arg3]代码>@IRelephant我更喜欢使用switch语句,因为它们更容易理解。我已经很长时间没有使用它们了,所以我完全忘记了必须打破每种情况。我只是建议这样做,因为您可以将代码从大约30行减少到2:-)为什么不直接命名参数的数量,从和到?在这种情况下,最好使用数组并完全删除开关。类似于answer=(arg1*conv[arg2])/conv[arg3]代码>@IRelephant我更喜欢使用switch语句,因为它们更容易理解。我已经很长时间没有使用它们了,所以我完全忘记了必须打破每个案例。我只是建议这样做,因为您可以将代码从大约30行减少到2:-)