0

我在读取文件然后将其内容放入数组时遇到问题。控制台说我的错误在这里:

Exception in thread "main" java.lang.NullPointerException
at readFile.readFile(readFile.java:23)
at apples.main(apples.java:6)

但是我现在不知道如何解决它。

import java.util.*;
import java.lang.*;
import java.io.*;


public class readFile {
private Scanner x;

public void openfile(){
    try{
        x = new Scanner( new File("/Users/Zachary/Desktop/chinese.txt"));

    }
    catch (IOException e){
        System.out.println("you failed foo");
    }
}
    public void readFile(){
        int y = 0;
        int[] nums = null;
        while(x.hasNext()){
            for(y=0; y<10;y++) {
                nums[y] = x.nextInt();
            }
            System.out.println(nums[y]);
        }
    }
    public void closeFile(){
        x.close();
    }
}



public class apples {
public static void main (String[]args){
    readFile r = new readFile();
    r.openfile();
    r.readFile();
    r.closeFile();

}
}
4

3 回答 3

2

你似乎有一个NullPointerException在:

nums[y] = x.nextInt();

那是因为这条线:

int[] nums = null;

它是空的,所以你不能把东西放进去。这是一个简单的修复:

int[] nums = new int[10];

上面的代码将初始化nums,使其成为一个空的(不是真的 - 它实际上是用 0 填充的)数组,如下所示:

---------------------
|0|0|0|0|0|0|0|0|0|0|
---------------------

如果您希望能够添加任意数量的数字,您将需要一个ArrayList(link)

此外,此代码将引发错误:

for(y=0; y<10;y++) {
    nums[y] = x.nextInt();
}
System.out.println(nums[y]);

那是因为你System.out.println不知道是什么y。只需将其移动System.out.printlnfor循环中,以便它可以“看到” y。(这称为范围)

于 2013-01-25T02:14:22.517 回答
0

内循环真的有必要吗?您正在循环 x * 10 次,这确实不是分配数据的好方法。

于 2013-01-25T02:20:08.020 回答
0

编译器错误指出错误发生在“readFile.java:23”。这是文件 readFile.java 的第 23 行。我相信这是这条线:

nums[y] = x.nextInt();

问题是您声明nums为:

int[] nums = null;

当您尝试访问一个初始化为 的数组时null,您应该不会对得到一个NullPointerException.

要解决此问题,您需要创建一个数组对象:

int[] nums = new int[SOME_SIZE];

您需要自己提供尺寸,因为您没有提供足够的信息让我猜测值。

于 2013-01-25T02:17:01.103 回答