从文件读入数组

时间:2014-10-27 17:31:27

标签: java arrays file

我有一个带数字的文件。它看起来如下:

1 2
3 4
5 6
7 8
9 10

将数字读入数组时会出现问题。

这是一段代码:

Scanner file1 = new Scanner( new File("file1.txt") );

int lengt_h = 0;

// Here Eclipse crashes...
while( file1.hasNext() ) lengt_h++;

int[] numberArray = new int[lengt_h];

for(int i=0; i<numberArray.length; i++) {
        numberArray[i] = file1.nextInt();
}

for(int n: numberArray) System.out.print(numberArray[n] + " ");

即使我将hasNext()函数更改为常量长度(例如10),numberArray数组中的数字如下所示:

1 1 1 2 1 1 5 5 1 3 

为什么代码无法正常运行?

4 个答案:

答案 0 :(得分:2)

  1. 您的代码问题是您没有移动Sacanner中的while loop指针,因此它是无限循环。
  2. 在您的上一个for循环中,您尝试访问numberArray[n]中的元素,这是错误的,因为n本身就是数组numberArray中的数字。
  3. 你可以试试这个:

     public static void main(String args[]) throws FileNotFoundException {
            Scanner file1 = new Scanner(new File("d:\\data.txt"));
            int lengt_h = 0;
            while (file1.hasNext()) {
                lengt_h++;
                file1.next();
            }
            file1 = new Scanner(new File("d:\\data.txt")); // again put file pointer at beginning
            int[] numberArray = new int[lengt_h];
            for (int i = 0; i < numberArray.length; i++) {
                numberArray[i] = file1.nextInt();       // read integer from file
            }
            for (int n : numberArray)
                System.out.print(n + " ");
        }
    

答案 1 :(得分:1)

while( file1.hasNext() ) lengt_h++; // infi loop
当且仅当此扫描程序具有另一个标记

时,

hasNext 方法才返回true

public boolean hasNext()

您没有阅读下一个令牌,因此hasNext()将始终返回true

<强> [编辑]

如果您事先不知道数组的大小,最好使用ArrayList

[1] http://www.tutorialspoint.com/java/util/java_util_arraylist.htm

答案 2 :(得分:0)

在此检查hasNext方法http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNext%28%29

它说&#34;扫描仪不会超过任何输入。&#34;

因此,为了进一步移动它,你应该移动到下一个标记。

答案 3 :(得分:0)

试试这个:

List<Integer> numberArray = new ArrayList<Integer>();
while (file1.hasNext())
    numberArray.add(file1.nextInt());
for (Integer n : numberArray)
    System.out.print(n + " ");