【问题标题】:Understanding NullPointerException when checking for Null after removing elements in 2D array [duplicate]在删除二维数组中的元素后检查 Null 时了解 NullPointerException [重复]
【发布时间】:2016-02-17 06:51:36
【问题描述】:

检查二维数组中的 Null 值时,我是否不断收到 java.lang.NullPointerException 错误?

这是我的二维数组:

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 乔恩·杜德 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) 在完整脚本中的位置。

【问题讨论】:

  • 在询问有关异常的问题时,您必须发布完整的堆栈跟踪并清楚地标识代码中引发异常的语句。请使用此信息更新您的帖子。
  • 除非您以下列形式提供您的问题,否则无法确定:stackoverflow.com/help/mcve
  • 供将来参考:可能最多有十几行与错误相关。尽量减少你的例子,你可能会自己发现错误。

标签: java arrays multidimensional-array nullpointerexception


【解决方案1】:

我怀疑异常实际上是由这一行引发的:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多