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我还建议不要在循环中初始化循环计数,除非你有很好的理由。