簡體   English   中英

為什么這段代碼會拋出異常?

[英]Why does this code throw an exception?

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;
    }

}

請有人幫助我如何擺脫這個異常。

String[] con=new String[test]; 使用test元素創建一個新的String數組,並將其分配給con 但是,這根本不會創建任何String對象- 您只是創建了一個數組,其中所有元素都是null 在調用concat()之前,您必須確保con[count]實際上是指一個String 您可以通過檢查它是否是null並在調用concat()之前為其分配""來執行此操作,或者您可以有一個單獨的循環,將一個空字符串放入con的每個元素中。

順便說一句: concat()不會修改您調用它的String 它創建一個新的String並返回它,但你不對返回值做任何事情,所以它被扔掉了。 您應該使用+=代替(這也會創建一個新的String ,但它會將新的String分配給數組元素)。

既然你在這里得到 NullPointerException,

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

這意味着con[count]的值為null並且您正在嘗試在 null 實例上調用.concat( )

這里con[]沒有初始化,所以默認取null 您需要初始化con[]數組的元素,即說"" ,然后嘗試調用 concat 方法。

您沒有初始化 con[] 的每個元素

new String[] 為您提供了一個 null 字符串引用數組。 如果您希望代碼正常工作,您必須將它們設置為空字符串。

當你這樣做

String[] con=new String[test];

您創建一個長度為test的新字符串數組。 然而,這個數組中的元素開始是null 因此,在將它們初始化為字符串之前,您不能對它們調用concat

這意味着,您應該在調用concat之前將字符串初始化為空字符串""

另外,字符串是不可變的,所以concat生成一個新的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++;
}

看起來 conc[count] 是 null,如果那是你得到 NullPointerException 的地方。 你應該用一個值來初始化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM