如何在使用数组时解决Null Pointer Exception?

时间:2015-10-26 04:25:39

标签: java arrays exception

这里显示行arr[i] = "true"中的空指针异常;

String[] count = null;
String[] arr = null;
int i = 0;
rs2 = st2.executeQuery("SELECT COUNT(*) as y FROM " + usrtbl + " WHERE user_id NOT IN (SELECT  user_id FROM " + usrroletbl + ")");
rs2.next();
if (rs2.getInt("y") == 0) {
    arr[i] = "false";
    count = arr;
    i++;
} else {
    arr[i] = "true";
    count = arr;
    i++;
}

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您已将arr定义为null 并且您尚未为其分配任何内存。当然,访问arr[i]会产生NullPointerException

您可以先运行SQL查询以获取结果数并分配空间,例如

arr = new String[<count>];

或者您可以使用ArrayList来保存值。这更简单,因为它会动态增长以保存您的数据。

另外,您应该考虑将arr(或您的ArrayList)转换为boolean。然后,您可以直接使用truefalse(而不是等效的字符串)。

答案 1 :(得分:0)

您需要初始化String[] array

方法1

String[] errorSoon = new String[100]; // <--initialized statement, this is fixed size array, so you need to set the size accordingly, keeping memory usage in mind.

<强> Approach2

使用列表

List<String> errorSoon  = new ArrayList<String>();

同样如@dave所述,如果真的需要在这里有数组,或者只有boolean variable可以为你工作。

答案 2 :(得分:0)

正如@Dave所说,你已经将两个String数组都声明为null,所以你当然会得到NullPointerException。您必须先知道结果集的大小,然后根据大小声明数组。

但是我会建议你使用ArrayList。它简单,可以动态添加您的结果。你可以这样做 -

List<String> list=new ArrayList<String>();
while(rs.next()){
if(// your condition){
   list.add("something");
}
else{
   list.add("something");
}
}

因此它会继续在列表中添加“某些东西”,直到最后一行被覆盖。 然后,您可以根据您的要求轻松遍历列表。 或者您也可以使用以下命令将ArrayList转换为数组 -

Object obj[]=list.toArray(); //Note that it will create an Array of Object datatype. You have to typecast it to your required datatype later if you want to print or manipulate the data.