0

重複の可能性:
中断なしで切り替える

私は小さな電卓アプリを作成しています。計算ボタンをクリックすると、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);
}
4

3 に答える 3

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);
于 2012-12-25T20:30:17.433 に答える
8

中断するのを忘れたので、case ステートメントが抜け落ちています。これを試して:

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;

関連ドキュメント

于 2012-12-25T20:24:31.163 に答える
7

ケース フォールスルーを参照してください。各ケース間で中断しない場合、次のケースも abreakに到達するまで実行されます。

break ステートメントがないと、switch ブロック内のステートメントが失敗するため、break ステートメントが必要です。一致する case ラベルの後のすべてのステートメントは、後続の case ラベルの式に関係なく、break ステートメントに遭遇するまで順番に実行されます。

于 2012-12-25T20:25:20.250 に答える