Java 写入和读取文件、使用循环和分析数据
我完成我的程序有点困难。这是我得到的和说明。创建一个包含500个从0到1000的随机数的文件,使用for循环将这些数字写入该文件。那么1。找到最小值2。找到最大值3。找出平均值和4。确定连续数字出现的时间。我在创建随机数文件和步骤4时遇到问题。提前谢谢Java 写入和读取文件、使用循环和分析数据,java,Java,我完成我的程序有点困难。这是我得到的和说明。创建一个包含500个从0到1000的随机数的文件,使用for循环将这些数字写入该文件。那么1。找到最小值2。找到最大值3。找出平均值和4。确定连续数字出现的时间。我在创建随机数文件和步骤4时遇到问题。提前谢谢 public static void main(String[] args) throws FileNotFoundException { PrintWriter prw = new PrintWriter("results.txt"
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();
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
PrintWriter prw=新的PrintWriter(“results.txt”);
File numfile=新文件(“randomdata.txt”);
扫描仪填充=新扫描仪(numfile);
int num,最大,最小,和=0,计数=0;
int程序编号=6;
标题(prw,程序编号);
双平均=0;
Random gen=新的Random();
System.out.println(“从gen:”);
对于(int i=0;i<1000;i++){
系统输出打印(gen.nextInt(500)+”);
num=gen.nextInt(500);
系统输出打印项数(num);
sum=sum+num;
计数++;
平均值=(双)总和/计数;
}
while(infle.hasNext()){
num=infle.nextInt();
最大=infle.nextInt();
最小=infle.nextInt();
系统输出打印项数(num);
如果(数值<最大值){
最大=num;
}
如果(数值>最小值){
最小=num;
}
System.out.println(“最大的是:“+最大的”);
prw.println(“最大值为:“+最大值”);
System.out.println(“最小的是:“+最小的”);
prw.println(“最小值为:“+最小值”);
System.out.println(“平均值为:“+平均值”);
prw.println(“平均值为:“+平均值”);
}
prw.close();
}
我无法创建带有随机数的文件 您正试图打开一个不存在的文件:
File numfile = new File("randomdata.txt");
Scanner infile = new Scanner(numfile);
Scanner
构造函数试图打开该文件,但该文件尚不存在,因此它抛出一个FileNotFoundException
。您还不需要扫描仪
,因为您首先要创建该文件。改用文件编写器
:
FileWriter fw = new FileWriter("randomdata.txt");
for (int i = 0; i < 1000; i++){
num = gen.nextInt(500);
fw.write(num + "\n");
}
fw.close();
FileWriter fw=newfilewriter(“randomdata.txt”);
对于(int i=0;i<1000;i++){
num=gen.nextInt(500);
fw.write(num+“\n”);
}
fw.close();
您可能还需要检查中的-循环-它会生成范围为0..500的1000个数字,反之亦然
然后,您需要重新设计,而-循环:
- 删除从数据文件中读取最大/最小值的行。这需要计算,而不是从数据文件中读取
- 将结果的打印移到循环之外-您不需要在每次循环迭代中打印它
- 使用合理的值初始化
最大值
和最小值
- 将
的平均值的计算从循环移动到循环中,而循环中
有了它,你应该有一个工作程序,在那里你可以检查结果是否符合你的预期
确定连续数字出现的次数
想一想如何解决这个问题——你想知道当前读取的数字是否等于先前读取的数字+1。因此,您需要在while
-循环中跟踪先前读取的数字,类似于使用最大的和最小的所做的操作。注意第一次循环迭代,这里还没有以前的数字
顺便说一句:我故意没有用代码给出完整的答案;) 首先,我们不是来给你做作业的;-)
第二,先写下你想要的
例如:
- 创建文件
- 将随机数写入文件(0-1000)(是否允许有两个数字?)
- 关闭/保存文件
- 打开文件
- 读文件
- 查找最大数字
- 查找最低数量
- 计算平均值
- 计算最高连续值
在用java尝试之前,将其转换为您理解的逻辑
第四步:如何计算纸上连续数字的数量?
f、 e。
-每当一个新的数字比之前的数字高一个时,增加temp变量
-每次不使用时(新值>旧值),将临时变量与最高的连续变量进行比较,并保存最高的变量。按顺序重置温度变量
这将导致:
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);
}
while(infle.hasNext()){
num=infle.nextInt();
最大=infle.nextInt();
最小=infle.nextInt();
系统输出打印项数(num);
如果(数值<最大值){
最大=num;
}
如果(数值>最小值){
最小=num;
}
System.out.println(“最大的是:“+最大的”);
prw.println(“最大值为:“+最大值”);
System.out.println(“最小的是:“+最小的”);
prw.println(“最小值为:“+最小值”);
System.out.println(“平均值为:“+平均值”);
prw.println(“平均值为:“+平均值”);
}
每次重写最小/最大变量时
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);
最大值=0;//0,因为与0-1000之间的数字相比,新值更大
最小值=9999;//0在这里是错误的,因为它显然是最小的数字
总数=0;
金额=0;
//循环遍历文件的行,接下来的每个元素表示一个数字。
//使用此循环计算结果值,而不是打印每个新数字
while(infle.hasNext()){
num=infle.nextInt();
//用新的最大值覆盖最大变量
如果(数值>最大值){
最大=num;
}
//覆盖smalles