Switch Statement Buggy?

Cod*_*ver 0 java swing switch-statement

可能重复:
不间断切换

我正在制作一个小型计算器应用程序,当单击计算按钮时,会运行一个switch语句,但生成的数字不是它应该是的,我测试了我的输入,他们在这里工作的是switch语句:

switch (currentOp) 
{
    case "+" : 
        answer = Float.toString(inp1 + inp2);
    case "-" : 
        answer = Float.toString(inp1 - inp2);
    case "X" : 
        answer = Float.toString(inp1 * inp2);
    case "/" : 
        answer = Float.toString(inp1 / inp2);
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 10

只是对另一个答案的补充,使用多态通常是切换案例的首选:

public enum Operation {
    ADDITION {
        @Override
        public float compute(float a, float b) {
            return a + b;
        }
    },
    SUBTRACTION {
        @Override
        public float compute(float a, float b) {
            return a - b;
        }
    },
    PRODUCT {
        @Override
        public float compute(float a, float b) {
            return a * b;
        }
    },
    DIVISION {
        @Override
        public float compute(float a, float b) {
            return a / b;
        }
    };

    public abstract float compute(float a, float b);
}

...

answer = currentOp.compute(inp1, inp2);
Run Code Online (Sandbox Code Playgroud)

  • 哇!像这个解决方案.+1 (2认同)

Mar*_*ers 8

你忘了打破所以你的案例陈述正在逐渐消失.试试这个:

case "+" : answer = Float.toString(inp1 + inp2); break;
case "-" : answer = Float.toString(inp1 - inp2); break;
case "X" : answer = Float.toString(inp1 * inp2); break;
case "/" : answer = Float.toString(inp1 / inp2); break;
Run Code Online (Sandbox Code Playgroud)

相关文档


Tim*_*ora 7

案例通过.如果你没有在每个案例之间中断,那么下一个也将被执行,直到break达到a.

break语句是必需的,因为没有它们,switch块中的语句都会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句.