NullPointerException 以及处理它的最佳方法

lup*_*pin 5 java null nullpointerexception

注意:这是家庭作业/作业,如果您不想回答,请不要回答。

好吧,经过一些搜索和阅读这些:

如何检查数组元素是否为 null 以避免 Java 中的 NullPointerException 优雅地避免 Java 中的 NullPointerException http://c2.com/cgi/wiki?NullPointerException

在如何处理我的代码上的 NullPointerException 错误方面仍然没有取得任何进展,有问题的代码片段:

int findElement(String element) {
          int retval = 0;

            for ( int i = 0; i < setElements.length; i++) {
               if ( setElements[i].equals(element) ) {  // This line 31  here
                  return retval = i;

               }
               else {
                   return retval = -1;
               }
           }

          return retval;
       }

       void add(String newValue) {
            int elem = findElement(newValue);
            if( numberOfElements < maxNumberOfElements && elem != -1 ) {
               setElements[numberOfElements] = newValue;
               numberOfElements++;
            } else { System.out.println("Element " + newValue + "already exist"); }
       }
Run Code Online (Sandbox Code Playgroud)

它可以编译,但向集合中添加新元素会引发 NullPointerException 错误。

D:\javaprojects>java SetDemo
Enter string element to be added
A
You entered A
Exception in thread "main" java.lang.NullPointerException
        at Set.findElement(Set.java:31)
        at Set.add(Set.java:44)
        at SetDemo.main(Set.java:145)
Run Code Online (Sandbox Code Playgroud)

我添加了另一个检查,虽然老实说不知道这是否正确到第 31 行。 if ( setElements != null && setElements[i].equals(element) ) 但仍然没有喜悦。

非常感谢文档/提示或解释。

学习, 羽扇豆

cle*_*tus 4

你初始化过setElements任何地方吗?意义:

String[] setElements = new String[100];
Run Code Online (Sandbox Code Playgroud)

如果您只是声明一个数组变量:

String[] setElements;
Run Code Online (Sandbox Code Playgroud)

作为类的数据成员,它被初始化为null. 你必须让它指向某件事。您可以内联执行此操作:

public class MyClass {
  private String[] setElements = new String[100];
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者在构造函数中:

public class MyClass {
  private String[] setElements;

  public MyClass() {
    setElements = new String[100];
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)