我在代码的这一部分的最后一行中得到了上述错误。
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 (...) {}
此错误的原因是什么以及如何解决?
答案 0 :(得分:2)
b
的唯一用途是
b = null;
...
*b[j][n] ...
您需要先将b
设置为实际数组,然后才能尝试对其进行索引。
答案 1 :(得分:0)
String[][]
b是null
。看起来你不应该在这里使用Array
,因为你不知道前面的大小。您可以将ArrayList
与某个自定义对象一起使用。
答案 2 :(得分:0)
In the Java programming language, arrays are objects(§4.3.1), 是动态创建的,可以分配给类型的变量 Object(§4.3.2)[...]数组的一个组件由一个数组访问表达式访问 (§15.13)由一个表达式组成,该表达式的值是一个数组 引用后跟一个由[和]括起来的索引表达式,as 在A [i]。
数组访问表达式如何工作?与this一样。
相关位:
否则,如果数组引用表达式的值为null, 然后抛出NullPointerException。
长话短说:数组是对象,b
是对(数组)对象的引用 - 就像基本类型中的Java一样。
引用可以指向某些内容或是null
引用。
null
- 引用与堆中任何其他类型的对象完全不同,包括空数组:你可以'用它做任何事情,包括尝试访问它的元素,除了为它分配一个值(把它想象成一个地址簿中的空白“电话”行:在打电话之前你必须要拨打一个号码!)
所以,您必须首先将指向引用到实际数组,
b = new String[10][10]
。
在
之后使用此权限 String[][] b = null;
会是一个好主意;或者你可以 String[][] b = new String[10][10]()
。
此时,b
指向堆中的字符串数组,您可以用它做事。
请注意,您必须指定尺寸。
如果你还不知道它,你可能会更好地使用其他容器,例如ArrayList
,grows dynamically。