如何修复 NullPointerException 错误

how to fix NullPointerException error

我正在尝试编写一个程序,让用户将他们的 class 的大小输入一个数组,然后找到所有 classes 的平均值。

当我 运行 程序时,它打印出我输入到数组中的内容,但随后它给了我一个 NullPointerException.

代码:

public void getinput() { //
    String dog="dog";
    boolean done=true;
    int x=0;
    int avg=0;
    int z=0;
    Scanner scan = new Scanner(System.in);
    String [] cs = new String [100];
    while(done){
        System.out.println("Enter the size of one class. When you are done, enter 'quit'");//ask for class sizes 
        dog=scan.nextLine();
        cs[x]=dog;
        x++;
            if(dog.equalsIgnoreCase("Quit")){
                done=false;

    }
}

for(z=0;z<cs.length;z++) {
    if (!(cs[z].equalsIgnoreCase("quit"))&& !(cs[z]==null)){
        System.out.print(cs[z]+", ");
    }
}
for(z=0;z<cs.length;z++) {
    if (!(cs[z].equalsIgnoreCase("quit"))&& !(cs[z]==null)){
        avg=Integer.parseInt(cs[z])+avg;
        System.out.println("");
        System.out.println("The average number of students in each classroom is "+avg);
        }
}

如果 cs[z] 可以为 null 你应该交换条件的顺序,因为当 cs[z] 为 null 时 cs[z].equalsIgnoreCase("quit") 会抛出 NullPointerException :

if (cs[z]!=null && !(cs[z].equalsIgnoreCase("quit")))

另一个更简单的解决方案是首先使用字符串反转条件,因为 equalsIgnoreCase 已经处理了空可能性:

if ("quit".equalsIgnoreCase(cs[z])){

这样你就会知道这部分代码不会抛出 NullPointerException。