Java 读取文件并放入数组

Java 读取文件并放入数组,java,arrays,loops,file-io,Java,Arrays,Loops,File Io,我在读取文件并将其内容放入数组时遇到问题。控制台显示我的错误在这里: 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

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

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();

}
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
公共类读取文件{
专用扫描仪x;
公共void openfile(){
试一试{
x=新扫描仪(新文件(“/Users/Zachary/Desktop/chinese.txt”);
}
捕获(IOE异常){
System.out.println(“你失败了foo”);
}
}
公共void readFile(){
int y=0;
int[]nums=null;
while(x.hasNext()){

对于(y=0;y您似乎在以下位置有一个
NullPointerException

nums[y] = x.nextInt();
这是因为这一行:

int[] nums = null;
nums[y] = x.nextInt();
它是空的,所以你不能把东西放进去。这里有一个简单的修复方法:

int[] nums = new int[10];
上面的代码将初始化
nums
,这样它就是一个空数组(不是真的-实际上是用0填充的),如下所示:

---------------------
|0|0|0|0|0|0|0|0|0|0|
---------------------
如果您希望能够添加任意数量的数字,则需要一个

此外,此代码将抛出一个错误:

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

for(y=0;y编译器错误声明错误发生在“readFile.java:23”处。这是readFile.java文件的第23行。我相信这是这一行:

int[] nums = null;
nums[y] = x.nextInt();
问题是您将
nums
声明为:

int[] nums = null;
当您尝试访问一个初始化为
null
的数组时,您不会惊讶地发现
NullPointerException

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

int[] nums = new int[SOME_SIZE];

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

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

我认为第23行是
nums[y]=x.nextInt()
其中
nums
是在未分配的情况下访问的。假设您使用的是IDE,为什么不尝试使用调试器逐行检查您的程序?谢谢,这是有效的,但是我在第25行没有错误。这是System.out.println(nums[y]);@suggamuggafugga…什么错误?“我有错误”没有帮助。解决这个问题:只需将
系统.out.println
移动到for循环中。@suggamuggafugga我还建议不要在循环中初始化循环计数,除非你有很好的理由。