0

これは私のコードです

import java.util.*;
import java.io.*;

public class eCheck10A
{
public static void main(String[] args)
{
  PrintStream out = System.out;
  Scanner in = new Scanner(System.in);

  out.print("Enter your integers");
  out.println("Negative = sentinel");

  List<Integer> aList = new ArrayList<Integer>();



  for (int n1 = in.nextInt(); n1 > 0; n1 = in.nextInt())
  {
          if(n1 < 0)
          {
          break;
          }
  }


 }
}

n1 に入力したすべての数値を取得して平均化したい場合、これらすべての数値をどのように参照すればよいですか? それらを IF ステートメントに入れるつもりなので、負の数が入力された場合、プログラムは停止し、それらの平均を投稿します。

4

3 に答える 3

2

これは、このタスクを実行するために必要な疑似コードです (疑似コードは宿題/授業のように見えるため、疑似コードであり、実装を自分で取り除けば、より優れた開発者になるでしょう)。

平均を計算するために数値自体は必要ないため、数値を保存しても意味がありません。平均は、すべての数値の合計をカウントで割ったものとして定義されるため、覚えておく必要があるのはそれだけです。次のようなもので十分です。

total = 0
count = 0
n1 = get_next_number()
while n1 >= 0:
    total = total + n1
    count = count + 1
    n1 = get_next_number()
if count == 0:
    print "No numbers were entered.
else:
    print "Average is ", (total / count)

私が言及する他のいくつかのポイント。現状では、forステートメントは最初の非正数 ( <= 0) で終了し、不要になりifます。

さらに、平均にゼロを含めたい{1,2,3} = 2場合があります。の平均は の平均と同じではありません{1,2,3,0,0,0} = 1

これは、forステートメント自体で次のように行うことができます。

for (int n1 = in.nextInt(); n1 >= 0; n1 = in.nextInt())

if/breakそして、提供された疑似コードと同様に、ループ内のビットはまったく必要ありません。

于 2012-07-31T02:15:10.203 に答える
0

移動平均を行う別の方法は次のとおりです
。new_average=old_average+(new_number --old_average)/ count
変数タイプでmaxに達した場合は、この式をお勧めします。

于 2012-07-31T02:37:48.917 に答える
0

必要な作業の概要: 変数 sum を作成してすべての値を合計し、count という別の変数を作成します。この変数は、リスト aList に負でない数の数を格納するために使用されます。次に、合計をカウントで割り、平均を求めます。

于 2012-07-31T02:15:46.637 に答える