在删除2D数组中的元素后检查Null时了解NullPointerException

时间:2016-02-17 06:51:37

标签: java arrays multidimensional-array nullpointerexception

检查2D数组中的Null值时,是否一直收到java.lang.NullPointerException错误?

这是我的2D阵列:

String[][] userInfo = new String[10][4];

这是一种根据用户输入删除数组中整个条目的方法:

private void removeUser(String userInfo[][]) {
        String first = "";
        String last = "";
        Scanner searchUserinput = new Scanner(System.in);
        String searchUser;
        System.out.println("Which user would you like to search for? Please enter their first and last name");
        searchUser = searchUserinput.nextLine();
        /*System.out.println(searchUser); */

        String[] words = searchUser.split("\\s+");

        if (words.length > 2) {
            System.out.println("Please enter only the first and last name");
        }
        else {
            for (int i = 0; i < words.length; i++) {
               first = words[0];
               last = words[1];
            }
        }

        outerloop:
        for (int row = 0; row < userInfo.length;) {
            for (int column = 0; column < userInfo[row].length;) {
                  if (userInfo[row][column]!= null) {
                      if (userInfo[row][0].equals(first) && userInfo[row][1].equals(last)) {
                        System.out.println("We found this user's contact info the database.");
                        System.out.println("Removing now...");
                        userInfo[row][0] = null;
                        userInfo[row][1] = null;
                        userInfo[row][2] = null;
                        userInfo[row][3] = null;
                        break outerloop;
                      }

                   else{
                       column ++;
                       row ++;
                       break;
                    }
                   }

              }
               row++;
            }

    }

我们说我有许多带有数据的行和列,如下所示:

比尔史密斯123 123  Jon Dude 234 23  另一个盖伊2332 435  有人1212 12

如果我尝试删除说Bill Smith,则不会抛出任何错误,或者如果我尝试删除Another Guy,则仍然没有问题。但是,例如,如果我删除Bill Smith,则尝试删除Jon Dude,这就是我收到错误的原因。但Java告诉我错误来自于我正在使用if (userInfo[row][column]!= null)检查空值的行,而不是理解原因。

Exception in thread "main" java.lang.NullPointerException
    at Lab02.removeUser(Lab02.java:96)
    at Lab02.<init>(Lab02.java:32)
    at Lab02.main(Lab02.java:5)

第96行是完整脚本中if (userInfo[row][column]!= null)的位置。

1 个答案:

答案 0 :(得分:1)

我怀疑此行实际上引发了异常:

if (userInfo[row][0].equals(first) && userInfo[row][1].equals(last)) {

之前的行只测试userInfo[row][column]是否为null,但(userInfo[row][0]和/或(userInfo[row][1]可能为null。因此,您可以在equals()值上调用null