第一次运行filereader会创建nosuchelement异常

时间:2013-11-29 21:14:47

标签: java java-io

我创建了一个名为fileWriter的方法,它将一个随机整数数组输出到一个txt文件中。这可以正常工作,但是当我尝试使用我的其他fileReader方法时,它应该读取该文件并将其添加到另一个数组,即使文件已经创建,它也会给我一个NoSuchElementException (我检查过)。我第二次运行该程序它确实工作,但文件现在的数量是之前的两倍。我尝试在将数组导入之前创建一个空白文件,但是第一次运行程序时它仍然给出了相同的错误消息。如果有人能够暗示为什么会发生这种情况,我们将不胜感激。

这是我的代码:

/*******************************************************************************/ 
import java.util.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class randomNum {

    public static void main(String[] args) {


        FileWriter f;
        try {
//here i create a blank file to try and fix the NoSuchElements exception
            PrintWriter x=new PrintWriter(f=new                 FileWriter("C:\\LOG\\a3Unsorted.txt"));
            } catch (IOException e) {
            e.printStackTrace();
        }
        Random gen = new Random();

//This creates the original array 
        int[] array=new int[10];

        for(int i=0;i<array.length;i++){
            int rdm=gen.nextInt(100);

            array[i]= rdm;              
        }
    //call the other class  
        Sort num = new Sort(array);

        //call method fileWrite from class Sort to send the array to the file

        Sort.fileWrite(array);

    //call method fileRead from class Sort to read the file thats been created (this is where i think could be the issue)   

        Sort.fileRead(array);

        for(int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }//prints out the array from the file in default output

        }

}
    /***************************************************************************/

import java.io.*;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class Sort {
    private static PrintWriter out;
    private static FileWriter file;


    public Sort(int[] array) {
    }
    /***************************************************************************/   
    public static void fileRead(int[] array){

        Scanner s = null;
        try {

        s = new Scanner(new File("C:\\LOG\\a3Unsorted.txt"));

        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }
        array = new int[s.nextInt()];
        for (int i = 0; i < array.length; i++)
            array[i] = s.nextInt();


    }
    /**************************************************************************/
    public static void fileWrite(int[]array){

        try {
            out = new PrintWriter(file = new FileWriter("C:\\LOG\\a3Unsorted.txt",true));
            for (int i=0; i<array.length; i++)
            {
                out.println(array[i]);
            }
            out.close();

        } catch (IOException ex) {
        }
    }


}//class

1 个答案:

答案 0 :(得分:0)

在这一行

 array = new int[s.nextInt()];

有一些非常错误的东西。你实际做的是从文件中读取第一个数字,然后实例化一个数字,该数字的长度由该数字给出。我不认为这是你想要的。如果此数字大于要读取的剩余数字的数量,当您尝试读取超出文件末尾的时间时,您将收到异常。

但是将array参数传递给此方法

的重点是什么
public static void fileRead(int[] array)

,如果将新数组实例分配给array变量?原始参考文献将丢失。

无论如何,你的代码有点乱,有很多静态和未使用的变量,例如: Sort的构造函数。