找到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);
答案 0 :(得分:1)
num = generator.nextInt(500); //Will this generate a file w/ 500 num?
以上所做的是生成0到499之间的随机值
为了让您能够从文件中读取,您必须使用BufferedReader
,Scanner
,FileReader
或任何其他阅读器而不使用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"
的调用效果不佳。