1

重複の可能性:
変数が初期化されていません-私はそうですか?

私はプログラミングにかなり慣れていないので、+のような1つの記号に固有ではない単純な計算機を作成してみたかったのです。とにかく、私が知る限り、私はすべてを正しく行ったので、なぜこれが機能しないのかよくわかりません。

import java.util.Scanner;

public class calculator2 {

    public static void main(String args[]){

        Scanner tom = new Scanner(System.in);
        double fnum, snum, answer;
        int symbol;


        System.out.println("Enter First Number");
        fnum = tom.nextDouble();

        System.out.println("Enter Comand, 1 = add, 2 = subtract, 3 = divide, 4 = multiply");
        symbol = (int)tom.nextDouble();

        System.out.println("Enter Second Number");
        snum = tom.nextDouble();

        switch (symbol){

        case 1:         
            answer = fnum + snum;

        case 2:         
            answer = fnum - snum;

        case 3:         
            answer = fnum / snum;

        case 4:         
            answer = fnum * snum;       
        }

        System.out.println(answer);
    }
}
4

4 に答える 4

1

これは、answer変数を初期化しておらず、switchステートメントに変数defaultを割り当てるケースがないためです。Java コンパイラは、symbolが ではない 1..4場合、answerに渡した時点で初期化されていないままになると考えていますprintln

answer宣言の時点で初期値を設定するか、defaultケースをswitch.

于 2012-12-22T19:29:15.940 に答える
1

変数を宣言する (初期化する) ときにデフォルト値を割り当てるか、スイッチにデフォルトのケースを提供します。

オプション1:

double answer = 0;

オプション 2:

switch(symbol) {
    case 1:
        ...
    default:
        answer = 0;
}

コードに重大なバグがあることに注意してください。ケースのコードの各ブロックはbreak;、つまり、で終わる必要があります

switch(symbol) {
case 1:
    answer = fnum + sum;
    break;
etc
default:
    answer = 0;
}

それ以外の場合、次のケースのすべてのコードも実行されます。スイッチケースは後藤のようなものです。

于 2012-12-22T19:30:43.000 に答える
0

fnum、snum、answer シンボルを宣言するときに値を指定する必要があります。そうしないと、Java は、以降の計算で使用できる値を持つことを保証できません。

于 2012-12-22T19:30:00.660 に答える
0

または、switch ステートメントにデフォルト句を追加するか、回答変数を初期化する必要があります。

また、「スイッチ フォール スルー」のため、コードにバグがある可能性があります。case ステートメントの条件が満たされると、次の case ステートメントも break (または return) ステートメントが存在するまで実行されます。

私があなたの状況にあった場合、次のようなコードを作成します。

double fnum = 0, snum = 0, answer 0;
int symbol = 0

...

switch (symbol){

    case 1: 

        answer = fnum + snum; break;

    case 2:

        answer = fnum - snum; break;

    case 3:

        answer = fnum / snum; break;

    case 4:

        answer = fnum * snum; break;
    default:

    }
于 2012-12-22T19:40:03.483 に答える