我想从文件中读取数字行。代码如下,但IDE显示NullPointerException运行时异常。不确定我做错了什么。
//reading the contents of the file into an array
public static void readAndStoreNumbers() {
//initialising the new object
arr = new int[15][];
try{
//create file reader
File f = new File("E:\\Eclipse Projects\\triangle.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
//read from file
String nums;
int index = 0;
while((nums = br.readLine()) != null) {
String[] numbers = nums.split(" ");
//store the numbers into 'arr' after converting into integers
for(int i=0; i<arr[index].length; i++) {
arr[index][i] = Integer.parseInt(numbers[i]);
}
index++;
}
}
catch(IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:5)
arr
的第二个维度未初始化,而您正在调用
arr[index].length
答案 1 :(得分:1)
你可能会因为两个原因而遇到NPEX。
您没有完成arr
的定义 - 您在代码中明确表示arr
为int arr[][]
;
即使您有上述内容,也不会为第二个阵列预留空间。你现在拥有的是jagged array;你可以在第二个数组中拥有你想要的第二维中任何长度的元素。
我对您的代码进行的唯一修改就是以下一行:
arr[index] = new int[numbers.length];
...将元素拉入numbers
之后,进入循环之前。
答案 2 :(得分:0)
我认为你应该使用StringBuffer ..
//reading the contents of the file into an array
public static void readAndStoreNumbers() {
//initialising the StringBuffer
StringBuffer sb = new StringBuffer();
try{
//create file reader
File f = new File("E:\\Eclipse Projects\\triangle.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
//read from file
String nums;
int index = 0;
while((nums = br.readLine()) != null) {
String[] numbers = nums.split(" ");
//store the numbers into 'arr' after converting into integers
for(int i=0; i<arr[index].length; i++) {
sb.append(Integer.parseInt(numbers[i])).append("\n");
}
}
}
catch(IOException e) {
e.printStackTrace();
}
}
答案 3 :(得分:0)
你需要改变 -
for(int i=0; i<arr[index].length; i++) {
到
arr[index] = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
答案 4 :(得分:0)
Java没有真正的多维数组。您正在使用的实际上是一个int数组数组:new int[n][]
实际上创建了一个数组,其中包含n
类型int[]
对象的空间。
因此,您必须分别初始化每个int
数组。从你从未在程序中的任何地方实际指定第二维的长度这一事实就可以看出这一点。