0

while ループの難しさを見つける。生成されたファイル内の各数値の呼び出しおよび/または読み取りを開始して、最小数値と最大数値、および合計を特定する方法がわかりません。また、可能であれば、誰かがコードの書き方を説明して、数字のいずれかが連続している場合に何回カウントするかを説明できますか。

PrintWriter prw = new PrintWriter("results.txt");
int num, largest, smallest, total = 0, count = 0;
int programnumber = 6;
    double average = 0;

PrintWriter prw1= new PrintWriter(new FileWriter("randomdata.txt"));
Random generator = new Random(); 
for (int i = 0; i < 1001; i++){     
         num = generator.nextInt(500);      //Will this generate a file w/ 500 num?
         prw1.write(num + "\n");
    }
    prw1.close();

    largest = 0;        
    smallest = 9999;        
    while (prw1.nextInt()){            //what call statement do I use? 
            num = (prw1.nextInt());    //unsure how to begin reading numbers
            if (num > largest){
                largest = num;
            }
            if (num < smallest){
                smallest = num;
            }
    total += num;
    count++; 
        }
    average = (total / total);
4

2 に答える 2

1
num = generator.nextInt(500);      //Will this generate a file w/ 500 num?

上記が行うことは、0 から 499 までのランダムな値を生成することです

ファイルから読み取るにはBufferedReader、 、ScannerFileReaderまたはその他のリーダーを使用する必要がありますが、読み取りでPrintWriterはなく書き込みに使用されるため、使用しないでください。

だから、これを試すことができます。最初にリーダーを作成します。

Scanner scr = new Scanner(fileToRead); //fileToRead should be the file you wrote

次に、以下を置き換えます。

while (prw1.nextInt()){            //what call statement do I use? 
    num = (prw1.nextInt());    //unsure how to begin reading numbers
    // ...
}

これとともに:

while(scr.hasNextLine()){
    num = Integer.parseInt(scr.nextLine());
    // ...
}
于 2013-03-23T00:10:18.573 に答える
1

私はnextIntあなたが思っていることをしないと思います。あなたが書く:

num = generator.nextInt(500); //Will this generate a file w/ 500 num?

その質問に対する答えはノーです。ドキュメントRandomよると:

public int nextInt(int n)  

この乱数ジェネレーターのシーケンスから引き出された、0 (0 を含む) と指定された値 (0 を含まない) の間の一様に分散された疑似乱数の int 値を返します。

そのnextInt(500)ため、0 ~ 499 (両端を含む) の数値が生成されます。

代わりに、 を使用nextInt(1000 + 1)して 0 から 1000 までの数値を取得します。

読み取りコードも変更する必要があります。出力ストリームから読み取ろうとしていますが、これはできません。スキャナーで動作するようにコードを変更することもできますが、個人的にはBufferedReader:

try {
    BufferedReader br = new BufferedReader(new FileReader("randomdata.txt"));
    String line = br.readLine();
    while (line != null) {
        // Do something, e.g. Integer.parseInt(line);
        line = br.readLine();
    }
    br.close();
} catch (IOException ie) {
    ie.printStackTrace();
}

BufferedReader代わりに使用する理由の 1 つScannerは、さまざまな形式のデータに拡張できることです。おそらく、行の各番号の前にプレフィックスがあったか、行に2つの番号がありました. を使用BufferedReaderして行全体を取得し、文字列をフォーマットしてから解析できます。では、 onScannerの呼び出しはうまくいきません。nextInt"Number: 6"

于 2013-03-23T00:10:20.780 に答える