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 :(得分: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的地方。 您应该使用值初始化它。