1

これが私の課題です:

非負の整数のリストを読み取り、最大の整数、最小の整数、およびすべての整数の平均を表示するプログラムを作成します。ユーザーは、最大値、最小値、および平均値の検索に使用されない負のセンチネル値を入力して、入力の終了を示します。平均は型の値である必要があるdoubleため、小数部で計算されます。

さまざまな方法で動作するようにさまざまな部分を取得しました。方法Aは最大値と最小値を正しく、合計を間違っており、方法Bは合計と最大値を正しく、最小値を間違っています。次のコードは、方法 B を示しています。一部の変数はコメント アウトされています。

    public class testthis2
{
    public static void main(String[] args) {

        System.out.println("Enter Numbers of Nonnegative Integers.");
System.out.println("When complete, enter -1 to end input values.");
Scanner keyboard = new Scanner(System.in);
//int  max = keyboard.nextInt();
int max = 0;
int min = max; //The max and min so far are the first score.
//int next = keyboard.nextInt();
int count = 0;
int sum = 0;
boolean areMore = true;
boolean run_it = false; //run it if its true
//if (max <= -1) {
 //  System.out.println("Thanks for playing!");
 //  run_it = false;
//}
// else 
// run_it = true;

while(areMore) //always true 
{

  int next = keyboard.nextInt();
   //int max = 0;
   // min = max;
  if (next < 0) { //if -1 is entered end loop.
      areMore = false;
      run_it = false;
      break; 
    }
    else //run this badboy
if(next >= max)
max = next;
else if(next <= min)
min = next;
run_it = true;
sum += next;
count++;


}
if (run_it = true) 

System.out.println("The highest score is " + max);
System.out.println("The lowest score is " + min);
System.out.println("count " + count);
System.out.println("sum " + sum);
System.out.println("average " + (double)(sum/count));
System.out.println("Thanks for playing!");        

 }

}

このテストを実行すると、最大値、合計、カウント、および平均がすべて正しくなります。ただし、明らかに 0 が入力されていないため、最小値が間違っています。テスト実行の例を次に示します。

When complete, enter -1 to end input values.
37
25
30
20
11
14
-1
The highest score is 37
The lowest score is 0
count 6
sum 137
average 22.0
Thanks for playing!

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

1

0 より小さい非負の整数がないため、最小の iterer は常に 0 です :)

if(next <= min) // for nonnegative integer this expression will return true only for 0
min = next;

したがって、「最小」変数を Integer.MAX_VALUE として初期化してみてください。私はそれがあなたを助けると信じています。

于 2013-09-29T00:03:38.400 に答える
0

初期化して両方を0にしているようminですmax

min次に、変更されるかmax、ユーザー入力に基づく唯一のコードです。入力値 ( next) がの場合>= maxmaxはその値に変更されます。これは、最初の入力で発生するはずです。

問題はmin、同じ方法で設定しようとすることです。 if (next <= min)ですが、min0 に初期化されているため、0 未満の場合にnextのみ可能です。<= minnext

ユーザーの最初の入力時に初期max化する必要があります。将来の入力をそれらの値と比較する前にmin、それらは両方ともユーザーの入力と等しく開始する必要があります。first

于 2013-09-29T00:03:31.503 に答える