0

我的代码出现 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)
4

5 回答 5

3

默认情况下,String[] 中的所有元素都使用null. 在这NullPointerException条线上抛出:

if (vec[i].equalsIgnoreCase(s))

为了修复它,在验证之前为元素分配值

于 2013-11-20T17:11:45.627 回答
1

当你创建一个新数组时,即String [] vec1=new String [n1];数组内的元素被初始化为null. 因此,当您尝试vec[i].equalsIgnoreCase(s)访问

if (vec[i].equalsIgnoreCase(s)) {

你得到一个NPE。

于 2013-11-20T17:12:14.450 回答
1
   String [] vec1=new String [n1];

此语句初始化数组 - 它不初始化数组的各个存储桶。为此,您可以查看数组并明确设置它们。

 for (String s : vec) {
     s = "Some String"; //or new String()
 }
于 2013-11-20T17:15:02.320 回答
1

切换vec[i].equalsIgnoreCase(s)s.equalsIgnoreCase(vec[i])

于 2013-11-20T17:25:23.450 回答
0

您已经使用以下代码创建了一个数组。

String [] vec1=new String [n1];

它只创建一个包含 n1 个元素的数组,但这些元素中的所有值都是空的。

你可以试试下面看看。

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]是空的。

于 2013-11-20T17:19:16.717 回答