为什么这段代码会抛出异常?

时间:2011-07-15 16:56:06

标签: java

import java.util.Scanner;


public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int i,j;
        int count = 0;
        int test=scan.nextInt();
        String[] con=new String[test];
        while(test>0)
         {i=scan.nextInt();
         j=scan.nextInt();

             for(int k=i;k<=j;k++)
             if(prime(k))
//***********the line below where i am getting nullpointer exception
            con[count].concat(k+"\n");


    test--;count++;}

    for( i=0;i<con.length;i++)
        System.out.printf("%s\n",con[i]);
    }



    private static boolean prime(int k) {
        // TODO Auto-generated method stub
        if(k==2)
            return true;
        if(k%2==0)
            return false;
        for(int l=3;l<=Math.sqrt(k);l=l+2)
        if(k%l==0)
            return false;
        return true;
    }

}

请有人帮我解决如何摆脱这种异常。

5 个答案:

答案 0 :(得分:4)

String[] con=new String[test];创建一个包含String元素的新test数组,并将其分配给con。但是,这根本不会创建任何String个对象 - 您只需创建一个所有元素都为null的数组。在调用con[count]之前,您必须确保String实际引用concat();您可以通过检查它是null并在调用""之前为其分配concat()来执行此操作,也可以使用单独的循环将空字符串放入{{1}的每个元素中1}}。

顺便说一下:con 修改您调用它的concat();它创建一个新的String并返回它,但是你没有对返回值做任何事情,所以它被抛弃了。您应该使用String代替(也会创建新的+=,但会将新的String分配给数组元素。)

答案 1 :(得分:1)

因为你在这里得到NullPointerException,

 con[count].concat(k+"\n");

这意味着con[count]的值为null,您尝试在空实例上调用.concat( )

此处con[] 未初始化,因此默认情况下需要null。您需要初始化con[]数组的元素,即对""说,然后尝试调用concat方法。

答案 2 :(得分:1)

您没有初始化con []

的每个元素

new String []为您提供一个空字符串引用数组。如果希望代码能够工作,则必须将它们设置为空字符串。

答案 3 :(得分:1)

当你这样做时

String[] con=new String[test];

您创建一个长度为test的新String数组。但是,此数组中的元素始于null。因此,在将它们初始化为字符串之前,不能在它们上面调用concat

这意味着,在对字符串""进行调用之前,应将字符串初始化为空字符串concat

此外,字符串是不可变的,因此concat生成一个新的String,而不是修改现有的String,因此您需要保存结果。

这意味着,你们都想要这样的东西:

while(test>0) {
    i=scan.nextInt();
    j=scan.nextInt();
    con[count] = ""; // Initialize con[count]


    for(int k=i;k<=j;k++) {
        if(prime(k)) {
            con[count] = con[count].concat(k+"\n");
        }
    }

    test--;
    count++;
}

答案 4 :(得分:0)

看起来conc [count]为null,如果那是你得到NullPointerException的地方。 您应该使用值初始化它。