1

ユーザーが入力した一連の正の整数を読み取るプログラムを作成しています。ユーザーは一度に 1 つの整数のみを入力します。次に、それらの整数の平均を計算します。ユーザーが 0 を入力すると、プログラムは終了します (0 は平均にカウントされません)。プログラムは、プログラムが終了すると平均を出力します。

質問: 私のコードは、while ループに到達すると動作を停止するため、ユーザーによる入力が計算されず、何も出力されません。while ループがユーザーの入力から平均を計算しないのはなぜですか? あなたの指導に感謝します:)

import java.util.Scanner;

public class AverageOfIntegers {

    public static void main(String[] args) {

        int integer;
        double sum;
        sum = 0;
        double average;
        Scanner input = new Scanner(System.in);
        int count; count = 0; 
        average = 0;


        System.out.println("Please enter an integer: ");

        integer = input.nextInt();


        while (integer != 0) {
        count = count + 1;  

            sum = sum + integer; 

            average = sum / count;

        }

        System.out.println("Average = " + average);

    }

}
4

5 に答える 5

4

これは、実際には複数の整数を合計することがないためです。ユーザーが入力する数字は 1 つだけです。その結果、ループは基本的に 1 つの数値だけに作用します。入力を while ループ内に配置し、実行中の合計を保存してそこにカウントする必要があります。このようなもの

while (integer != 0) {
    count += 1;  

        sum += integer; 

        average = sum / count;
        integer = input.nextInt();
    }
于 2013-11-01T13:42:46.097 に答える
1

説明

まず、データ型を定義するときに、定義でデフォルト値を設定できます。元:

double sum = 0;

double sum;
sum = 0;

次に、sum = sum + integer;次と同じです。sum += integer;

第三に、count = count + 1;次と同じです: count += 1OR (さらに良いことに),count++;

実際のアルゴリズムに関しては、1 つの問題と 1 つの提案があります。

  1. integer各ループの後に の値を変更していません。そのため、while 条件で行うかwhile ((integer = input.nextInt()) != 0) {、各ループの最後で行うことができます。

    while (integer != 0) {
        count ++; 
        sum += integer;
        average = sum / count;
        integer = input.nextInt();
    }
    
  2. これは (私の意見では) 技術的に優れたコードの提案ですが、見た目が良く、より直感的であり、while ループが実行中ではなく実行された後に平均を計算するための計算が少なくて済みます。そうすれば、必要のないすべてのループに対して、必要に応じて 1 回だけ計算できます。

_ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ __ _ _ _ __ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ ____

コード(完全なクラス)

public class AverageOfIntegers {
    public static void main(String[] args) {
        int integer;
        double sum = 0;
        double average = 0;
        Scanner input = new Scanner(System.in);
        int count = 0;

        System.out.println("Please enter an integer: ");

        // set integer = to the nextInt() while looping so it calculates properly
        while ((integer = input.nextInt()) != 0) {
            count ++; 
            sum += integer;
        }
        average = sum / count; // calculate the average after the while-loop

        System.out.println("Average = " + average);
    }
}

_ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ __ _ _ _ __ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ ____

入力/出力の例:

整数を入力してください:

5

10

15

0

平均 = 10.0

したがって、5 + 10 + 15 = 30 (合計) を実行すると、平均は 30 / 3 (30 は合計、3 はカウント) となり、Average = 10.0.

于 2013-11-01T13:52:43.733 に答える
0

問題は、input.nextInt() がループの一部であることです。あなたが書いた方法では、最初の入力がゼロでないときはいつでも、コードは無限ループに入ります。代わりに、次のようにします。

while ((integer = input.nextInt())  != 0) {
  count = count + 1;  
  sum = sum + integer; 
  average = sum / count;
}
于 2013-11-01T13:45:19.240 に答える
0

ループ内に移動する必要があるinteger = input.nextInt();ため、プログラムはループ内で入力を収集します。修正版を参照してください。

import java.util.Scanner;

public class AverageOfIntegers {

    public static void main(String[] args) {

        int integer = 0, count = 0; 
        double sum = 0.0, average = 0.0; 
        Scanner input = new Scanner(System.in);

        System.out.println("Please enter an integer: ");
        integer = input.nextInt();

        while (integer != 0) {
            count = count + 1;  
            sum = sum + integer; 
            System.out.println("Please enter an integer: ");
            integer = input.nextInt();
        }

        average = sum / count;
        System.out.println("Average = " + average);
    }
}
于 2013-11-01T13:42:27.367 に答える
0

ループの中:

while (integer != 0) {
    count = count + 1;  

    sum = sum + integer; 

    average = sum / count;
}

これは 0 の場合にのみ停止しintegerますが、この変数はループ内で変化しないため、最初から 0 になっていない場合は 0 になることはありません。

あなたがやりたいと言ったことによると、おそらく次のようにinteger = input.nextInt();、ループ内で呼び出しを繰り返す必要があります。

System.out.println("Please enter an integer: ");
integer = input.nextInt();

while (integer != 0) {

    count = count + 1;  
    sum = sum + integer; 

    System.out.println("Please enter an integer: ");
    integer = input.nextInt();
}

average = sum / count;

averageまた、他の方がおっしゃる通り、ループ後は1回だけ計算すればいいので、こちらも移動させました。

于 2013-11-01T13:43:33.250 に答える