[英]Java - Null Pointer Exception error
我在我的代码上收到NullPointerException错误。 我真的不知道为什么会这样。 这只是代码的一个示例,如果需要,我可以发布完整版本。
private static final Scanner in=new Scanner(System.in);
public static void main(String[] args) {
int n1=lerTamanho();
String [] vec1=new String [n1];
readVector(vec1); -> Line 11
}
private static int lerTamanho() {
System.out.print("Number: ");
int num=in.nextInt();
while (num<=0) {
System.out.print("Error! Number: ");
num=in.nextInt();
}
return num;
}
private static void readVector(String vec[]) {
int cont=0;
String s;
do {
System.out.print("Name: ");
s=in.nextLine();
if (validate(s,vec)) { -> Line 30
vec[cont]=s;
cont++;
} else {
System.out.println("That name already exists!");
}
} while (cont<vec.length);
}
private static boolean validate(String s, String vec[]) {
boolean success=true;
for (int i=0; i<vec.length; i++) {
if (vec[i].equalsIgnoreCase(s)) { >-> Line 44
return !success;
}
}
return success;
}
我得到的错误:
Exception in thread "main" java.lang.NullPointerException
at javaapplication63.JavaApplication63.validate(JavaApplication63.java:41)
at javaapplication63.JavaApplication63.lerVetor(JavaApplication63.java:30)
at javaapplication63.JavaApplication63.main(JavaApplication63.java:11)
默认情况下,String []中的所有元素都使用null
初始化。 NullPointerException
引发以下行:
if (vec[i].equalsIgnoreCase(s))
为了对其进行修复,请在验证之前为它们分配值
当您创建一个新数组时,即String [] vec1=new String [n1];
,将数组内的元素初始化为null
。 因此,当您尝试访问vec[i].equalsIgnoreCase(s)
if (vec[i].equalsIgnoreCase(s)) {
您将获得NPE。
String [] vec1=new String [n1];
该语句初始化数组-不会初始化数组的各个存储桶。 为此,您可以浏览数组并进行显式设置。
for (String s : vec) {
s = "Some String"; //or new String()
}
将vec[i].equalsIgnoreCase(s)
切换为s.equalsIgnoreCase(vec[i])
您已经使用以下代码创建了一个数组。
String [] vec1=new String [n1];
它仅创建具有n1个元素的数组,但这些元素中的所有值均为null。
您可以在下面尝试看看。
int n1=lerTamanho();
String [] vec1=new String [n1];
for (int i=0; i < n1; i++) {
vec1[i]= "SOME-STRING-TO-THIS-ELEMENT";
}
readVector(vec1);
NPE来自vec[i].equalsIgnoreCase(s)
,其中vec[i]
为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.