2011-07-15 85 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; 
    } 

} 

请有人帮助我,如何摆脱这种例外。这段代码为什么会抛出异常?

+0

你在哪里填充您CON阵列? – Suchi

+0

真是乱码! –

回答

4

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

顺便说一下:concat()确实不是修改String你打电话;它会创建一个新的String并将其返回,但您不对返回值做任何事情,因此它会被丢弃。您应该使用+=(也会创建新的String,但它会将新的String分配给数组元素)。

+0

秒前... – antlersoft

1

既然找你这里得到NullPointerException异常,

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

这意味着con[count]null和你试图调用.concat()对空实例。

这里,con[]未初始化,所以默认情况下需要null。您需要初始化con[]阵列的元素,即对""进行初始化,然后尝试调用concat方法。

+0

感谢您的帮助。 –

1

您还没有初始化CON中的每个元素[]

新的String []给你空字符串引用数组。如果你想让你的代码工作,你必须将它们设置为空字符串。

0

它看起来像conc [count]为空,如果这是你得到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

相关问题