问题描述
我在代码的以下部分的最后一行中收到上述错误。
String[][] b = null;
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
// use comma as separator
String[] country = line.split(cvsSplitBy);
String[] a=country[1].split(splits);
i = 0;
n = 0;
while(i<a.length) {
b[j][n]+=a[i];
}
}
} catch (...) {}
这个错误的原因是什么以及如何解决这个问题?
1楼
b
的唯一两个用途是
b = null;
...
*b[j][n] ...
您需要先将b
设置为实际数组,然后才能尝试对其进行索引。
2楼
String[][]
b 为null
。
看起来你不应该在这里使用Array
因为你不知道预先的大小。
您可以将ArrayList
与一些自定义对象一起使用。
3楼
(第 4.3.1 节),是动态创建的,并且可以分配给对象类型的变量(第 4.3.2 节)[...] 数组的一个组件被数组访问访问表达式(第 15.13 节)由一个表达式组成,该表达式的值是一个数组引用,后跟一个由 [ 和 ] 括起来的索引表达式,如 A[i]。
数组访问表达式如何工作? 像。
相关位:
否则,如果数组引用表达式的值为 null,则抛出 NullPointerException。
长话短说:数组是对象,而b
是对(数组)对象的引用——基本上就像 Java 中除了基本类型之外的所有内容。
一个引用可以指向某个东西,也可以是一个null
引用。
null
引用与堆中任何其他类型的对象完全不同,包括空数组:您不能对它做任何事情,包括尝试访问它的元素,除了为其分配一个值(将它想象成一个地址簿中的空白“电话”行:在打电话之前,您必须有一个要拨打的号码!)
所以,你必须首先让你的参考指向一个实际的数组,用
b = new String[10][10]
。
之后立即使用
String[][] b = null;
会是个好主意;
或者你可以只String[][] b = new String[10][10]()
。
此时, b
指向堆中的一个字符串数组,你可以用它做一些事情。
请注意,您必须指定大小。
如果您还不知道它,您可能最好使用其他容器,例如 ,它。