-2

プログラムを完成させるのに少し苦労しています。これが私が持っているものと指示です。for ループを使用して 0 ~ 1000 の範囲の乱数を 500 個保持するファイルを作成し、乱数をファイルに書き込みます。次に、 1. 最小値を見つけます。 2. 最大値を見つけます。 3. 平均を見つけます。乱数ファイルの作成とステップ 4 に問題があります。よろしくお願いします。

  public static void main(String[] args) throws FileNotFoundException {
    PrintWriter prw = new PrintWriter("results.txt");
    File numfile = new File("randomdata.txt");
    Scanner infile = new Scanner(numfile);
    int num, largest, smallest, sum = 0, count = 0;
    int programnumber = 6;
    header (prw, programnumber );
    double average = 0;

    Random gen = new Random();
    System.out.println("From gen: ");
    for (int i = 0; i < 1000; i++){
        System.out.print(gen.nextInt(500) + "");
            num = gen.nextInt(500);
            System.out.println(num);
            sum = sum + num;
            count++;
            average = (double) sum / count;
    }


    while (infile.hasNext()){
        num = infile.nextInt();
        largest = infile.nextInt();
        smallest = infile.nextInt();
        System.out.println(num);
        if (num < largest){
            largest = num;
        }
        if (num > smallest){
            smallest = num;
        }
        System.out.println("The largest is: " + largest);
        prw.println("The largest is: " + largest);
        System.out.println("The smallest is: " + smallest);
        prw.println("The smallest is: " + smallest);
        System.out.println("The average is: " + average);
        prw.println("The average is: " + average);


    }
    prw.close();
}
4

2 に答える 2

1

乱数でファイルを作成できません

存在しないファイルを開こうとしています:

File numfile = new File("randomdata.txt");
Scanner infile = new Scanner(numfile); 

コンストラクターはScannerファイルを開こうとしますが、まだ存在しないため、FileNotFoundException. Scanner最初にそのファイルを作成したいので、まだ必要ありません。FileWriter代わりにaを使用します。

FileWriter fw = new FileWriter("randomdata.txt");
for (int i = 0; i < 1000; i++){
    num = gen.nextInt(500);
    fw.write(num + "\n");
}
fw.close();

-loopも確認する必要があるかもしれませんfor- 0..500 の範囲で 1000 個の数値を生成しますが、その逆ではありません。

while次に、ループを再設計する必要があります。

  • データファイルから最大/最小を読み取る行を削除します。これは、データ ファイルから読み取るのではなく、計算する必要があります。
  • 結果の印刷をループの外に移動します - ループの反復ごとにこれを印刷する必要はありません
  • 妥当な値で初期化largestするsmallest
  • forループ内のwhileループから平均の計算を移動します

これで、結果が期待どおりかどうかを確認できる作業プログラムが作成されます。

連続した数字が何回出現したかを判断する

どのように解決できるか考えてみてください。現在読み取られている数値が、以前に読み取られた数値 + 1 と等しいかどうかを知りたいとします。そのため、whileと で行ったのと同様に、 - ループで以前に読み取られた数値を追跡する必要がlargestありますsmallest。前の番号がまだ存在しない最初のループ反復に注意してください。

ところで:私は意図的にコードで完全な答えを出さなかった;)

于 2013-03-19T15:39:47.437 に答える
0

まず、私たちはあなたの宿題をするためにここにいるのではありません;-)

次に、最初に必要なものを書き留めます。

例えば:

  • ファイルを作成する
  • ファイル(0-1000)に乱数を書き込みます(2回の数字を使用できますか?)
  • ファイルを閉じる/保存する

  • ファイルを開く

  • ファイルを読む
  • 最高の数を見つける
  • 最小の数を見つける
  • 計算平均
  • 連続する最高値をカウントする

これを、Javaで試す前に理解しているロジックに変換してください。

ステップ4:紙の連続した数字の量をどのように数えますか?fe-新しい数値が前の数値より1つ大きくなるたびに、一時変数を増やします。
-そうでない場合は常に(新しい値>古い値)、一時変数を最も高い連続変数と比較し、最も高い変数を保存します。一時変数を後でリセットします

これにより、次のようになります。

int largestConsecutive = 0;
int largestConsecutiveTemp=0;
int previewValue =9999;
// loop through the lines of the file, each Next elements represents one number.
// Use this loop to calc the result values, not to print out on every new number
while (infile.hasNext()){
        ... 
        if(num > previewValue){
           //do something
        } else {
           //do something
        }
        ...
}

whileループは、最小/最大の数値を見つけるのにも少し間違っています。

while (infile.hasNext()){
        num = infile.nextInt();
        largest = infile.nextInt();
        smallest = infile.nextInt();
        System.out.println(num);
        if (num < largest){
            largest = num;
        }
        if (num > smallest){
            smallest = num;
        }
        System.out.println("The largest is: " + largest);
        prw.println("The largest is: " + largest);
        System.out.println("The smallest is: " + smallest);
        prw.println("The smallest is: " + smallest);
        System.out.println("The average is: " + average);
        prw.println("The average is: " + average);


    }

最小/最大の変数を毎回オーバーライドします。

largest = 0;        // 0, because when you compare with numbers between 0-1000, the new value is larger
smallest = 9999;    // 0, would be wrong here as it would be abvious the smallest number
total = 0;
amount=0;
// loop through the lines of the file, each Next elements represents one number.
// Use this loop to calc the result values, not to print out on every new number
while (infile.hasNext()){
        num = infile.nextInt();

        // override the largest variable with the new largest number
        if (num > largest){
            largest = num;
        }
        // override the smallest variable with the new smallest number
        if (num < smallest){
            smallest = num;
        }
        // needed to calc the average
        total += num;
        amount++; 
    }
average = (total / amount);

System.out.println("The largest is: " + largest);
prw.println("The largest is: " + largest);
System.out.println("The smallest is: " + smallest);
prw.println("The smallest is: " + smallest);
System.out.println("The average is: " + average);
prw.println("The average is: " + average);
于 2013-03-19T15:42:18.127 に答える