2

誰か助けてください。コードのロジックを修正するのに苦労しています。このプログラムは、配列のサイズが 100 に設定されていると仮定して、ユーザーが入力した数値の平均を計算することになっています。ユーザーが -99 を入力すると、プログラムは終了します。問題は while ループ処理内にあることがわかっています。

    Scanner input = new Scanner(System.in);

    int[] num = new int[100];

    int ctr=0, sum=0, ave = 0;

    while(num[ctr]!= -99)
    {
        System.out.print("Enter number: ");
        num[ctr]= input.nextInt();

        sum += num[ctr];

        ctr++;

    }

    System.out.print("Numbers are " );

    for(int x = 0; x<ctr; x++)
    {
        System.out.print(num[x] + " ");
    }

    ave = sum / (ctr-1);
    System.out.println("Average is " + ave);

    }

}
4

3 に答える 3

0

ループの問題は、while入力されたばかりの要素を決して見ないことです。常に直後の要素を調べます。

于 2012-12-02T07:31:51.653 に答える
0

whileループの外側で最初の入力を読み取る必要があります。whileユーザーがを入力する-99と、ループ内でインクリメントctrするため、チェックは間違った番号になります。したがって、実際には、確認したい現在の番号を確認することはありません。

int ctr=0, sum=0, ave = 0;
System.out.print("Enter number: ");
num[ctr]= input.nextInt();
while(num[ctr]!= -99)
{
   sum += num[ctr];
   ctr++;
   System.out.print("Enter number: ");
   num[ctr]= input.nextInt();
}

ただし、ユーザーが1つの数値のみを入力する場合を処理する必要があります。この場合、ゼロで除算しているため、平均が間​​違っています。また、次のことを行う必要があります。

ave = sum / (ctr);

それ以外の:

ave = sum / (ctr-1);

これで、良い結果が得られます。

于 2012-12-02T07:33:43.437 に答える
0

while ループには、配列がいっぱいになった場合の終了条件がありません。(100 個の整数が入力され、ctr が 100 の場合)

于 2012-12-02T07:27:59.310 に答える