在Java中使用switch的问题

我无法弄清楚为什么它总是返回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 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; ... 

像这样重写每一个案例

 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语句非常难以阅读,并且难以调试。 最好将所需的function封装到方法调用中。

话虽如此,你的交换机中的任何地方都没有break声明。 无论如何,它都将落到最后一个案例(设置答案等于案件的底部)。

你应该使用break in switch语句,否则你的结果可能会被破坏

除了使用break ,使用return语句可以解决这个问题,同时还可以防止出现break

 case 2: switch(arg3) { // if ounce case 0: return (arg1 * milligram) / milligram;