2011-07-15 10 views
0
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; 
    } 

} 

誰かがこの例外を取り除く方法を教えてください。 you'rここでNullPointerExceptionが取得して以来このコードはなぜ例外をスローしますか?

+0

これは、あなたはすべてのすべてのようなものをしたい、意味しますか? – Suchi

+0

本当に乱雑なコード! –

答えて

4

String[] con=new String[test];は、test要素で新しいString配列を作成し、conに割り当てます。ただし、Stringオブジェクトを作成しません。 - すべての要素がnullの配列を作成しただけです。 con[count]が実際にStringを参照してからconcat()を呼び出す必要があります。 nullであるかどうかを確認し、concat()を呼び出す前に""を割り当てるか、conの各要素に空の文字列を入れるループを個別に行うことができます。

ところでconcat()ではありません。Stringを変更してください。新しいStringを作成して返しますが、戻り値は何もしないので、それは破棄されます。代わりに+=を使用する必要があります(新しいStringも作成されますが、新しいStringが配列要素に割り当てられます)。

+0

秒前... – antlersoft

1

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

それはcon[count]の値がnullであり、あなたがnullインスタンス上.concat()を呼び出そうとしていることを意味します。ここで

それがデフォルトでnullを取るので、con[]が初期化されていません。 con[]という配列の要素、つまり""を初期化し、次にconcatメソッドを呼び出す必要があります。

+0

助けてくれてありがとう。 –

1

あなたは新しいString []はあなたにヌル文字列の参照の配列を与える[]

詐欺の各要素を初期化されていません。コードを動作させるには、空文字列に設定する必要があります。

0

conc [count]がnullの場合は、NullPointerExceptionが発生しています。 値で初期化する必要があります。

1

あなたは

String[] con=new String[test]; 

を行うと、あなたが長testの新しいStringアレイを作成します。しかし、この配列の要素はnullから始まります。したがって、文字列に初期化する前にconcatを呼び出すことはできません。

これは、concatを呼び出す前に、文字列を空の文字列""に初期化する必要があることを意味します。

さらに、文字列は不変なので、既存の文字列を変更するのではなく、concatが新しい文字列を生成するため、結果を保存する必要があります。あなたは詐欺配列を移入ん

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

+1他のバグを指摘する – jtoberon