Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入和读取文件、使用循环和分析数据_Java - Fatal编程技术网

Java 写入和读取文件、使用循环和分析数据

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"

我完成我的程序有点困难。这是我得到的和说明。创建一个包含500个从0到1000的随机数的文件,使用for循环将这些数字写入该文件。那么1。找到最小值2。找到最大值3。找出平均值和4。确定连续数字出现的时间。我在创建随机数文件和步骤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();
}
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