0

ユーザーに10個(またはそれ以下)の整数を入力して配列に入れ、それらの平均をとって出力するように要求するプログラミング割り当てがあります。ピリオドを入力すると、プログラムは整数の入力を求めなくなり、平均化を行う必要があります。

私の問題は、ユーザーが整数を入力するたびに、for ループが複数回実行されることです。

私のコードは以下です。これを修正する方法についてのアイデアはありますか?

    int[] intArr = new int[10];

    int entered;

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    for(entered = 0; entered < 10; entered++){
        System.out.println("Please enter an integer: ");

        int input = br.read();

        if(input == '.') break;

        else{
            intArr[entered] = input;
        }
    }

    int total = 0;
    for(int i : intArr){
        total += i;
    }

    System.out.println("Average: " + total/entered);
    System.out.println("Entered: " + entered);
4

3 に答える 3

0

String input = br.readLine()行全体を読み取るために使用します。

を確認するには"."、 を使用しますif (input.equals(".")) { ... }。(文字列の代わりに使用する必要がある理由を知りたい場合は、これをチェックしてください).equals()==

最後に、入力を整数に変換するには、こちらを参照してください。

于 2013-11-12T18:45:44.777 に答える
0

わかりました とても簡単です 最初になぜそれが起こっているのか説明させてください わかりました read() 関数は入力値の最初の文字を読み取り、残りの行はバッファに格納されるので、例えば整数を入力すると: 1 1 は変数に格納され、' \n'デフォルトでどの Java が入力値に追加されるかはバッファに格納されるため、ループの次の反復で文字 '\n' をバッファから入力値として読み取り、次の反復に移動します

例 2: プログラムで入力を 12 と入力すると、2 つの反復がスキップされるため、最初に入力時に 1 が格納されます。次の反復では、前の入力の値 2 が今回の入力として使用されます。さらに次の反復では、'\n ' そして、次の繰り返しに移動し、メモリに文字が残っていないため、入力を求められます

注::: read() 関数は文字を返すため、ユーザーが計算中に 5 を入力しても 10 の ASCII コードが使用されますが、これは 53 ではありません。

修理:::

int[] intArr = new int[10];
int entered;
BufferedReader br = new BufferedReader(new InputStreamReader(System. in ));
for (entered = 0; entered < 10; entered++) {
    System.out.println("Please enter an integer: ");

    String input = br.readLine();

    if (input.equals(".")) {
        break;
    } else {
        intArr[entered] = Integer.parseInt(input);
    }
}
int total = 0;
for (int i: intArr) {
    total += i;
}
System.out.println("Average: " + total / entered);
System.out.println("Entered: " + entered);
于 2013-11-12T19:22:56.397 に答える