文件保存500个随机数,范围从0到1000.将这些数字写入文件然后打开文件并逐个读取数字

时间:2013-03-22 23:50:51

标签: java arrays file loops random

找到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);

2 个答案:

答案 0 :(得分:1)

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

以上所做的是生成0到499之间的随机值

为了让您能够从文件中读取,您必须使用BufferedReaderScannerFileReader或任何其他阅读器而不使用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());
    // ...
}

答案 1 :(得分:1)

我认为nextInt不符合你的想法。你写道:

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

该问题的答案是。根据{{​​3}}:

public int nextInt(int n)  
     

统一返回伪随机数   在0(包括)和指定值之间分配int值   (独占),从这个随机数生成器的序列中提取。

所以nextInt(500)生成0到499(含)之间的数字。

相反,您需要使用nextInt(1000 + 1)来获取0到1000之间的数字。

您还应该更改您的阅读代码。您正试图从输出流中读取,但您无法做到。您可以更改代码以使用扫描仪,但我个人会使用the Random documentation

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代替Scanner的一个原因是它可以扩展到不同格式的数据。也许在行中的每个数字之前你有一个前缀,或者你在一行中有两个数字。您可以使用BufferedReader来抓取整行,然后在解析之前格式化字符串。使用Scanner时,nextInt上对"Number: 6"的调用效果不佳。