0

if私のコードは想定どおりに機能します。次のステートメントを入力すると問題が発生します。

if (sList.get(i).equals(null)){break;}

プログラムは、次のデバッグ情報(NullPointerException)でクラッシュします。

java.lang.NullPointerException at HangmanLexicon。(HangmanLexicon.java:51)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.reflect.DelegatingConstructor (DelegatingConstructorAccessorImpl.java:27)at java.lang.reflect.Constructor.newInstance(Constructor.java:513)at java.lang.Class.newInstance0(Class.java:355)at java.lang.Class.newInstance(Class。 java:308)at sun.applet.AppletPanel.createApplet(AppletPanel.java:807)at sun.applet.AppletPanel.runLoader(AppletPanel.java:714)at sun.applet.AppletPanel.run(AppletPanel.java:368)at java.lang.Thread.run(Thread.java:680)

これがすべてのコードです(ええ、私はそれが厄介であることを知っています、新しいことを学ぶときそれはそのように見えます):

public HangmanLexicon() 
{
/* 1. Open the data file HangmanLexicon.txt using a 
 * BufferedReader that will allow you to read it line by line. */
String readWord = "";


 try
 {
 BufferedReader rd = new BufferedReader (new FileReader ("ShorterLexicon.txt"));

    while (true)
    {
        readWord = rd.readLine();
        println(readWord);
        sList.add(readWord);
        if (readWord == null){
            println("Shit has hit the fan.");
            break;}
    }
    rd.close();
 }
 catch (IOException ex)
 {
     println ("Shit has hit the fan.");
     throw new ErrorException(ex);
 }

 println("readWord: "+ readWord);
/* 2. Read the lines from the file into an ArrayList. */
 for (int i = 0; i < sList.size(); i++)
    {
        if (sList.get(i).equals (null)){println("done.");}
        println("get: "+sList.get(i) + " pos: " + i);
    }

}
4

4 に答える 4

4

nullこの方法でテストするのではなく、次を使用してください。

if (sList.get(i) == null)

の使用法には、の結果が:である場合に自然に発生するequalsという問題があります。これは、でメソッドを呼び出すことができないためです。NullPointerExceptiongetnullnull

于 2012-09-28T20:05:02.823 に答える
4

のようsList.get(i)で、結果が。になる操作をnull呼び出しています。equals()nullNullPointerException

使用する

if (sList.get(i)== null)

それ以外の

if (sList.get(i).equals (null))
于 2012-09-28T20:05:39.297 に答える
2

配列に値がある場合、関数をnull呼び出すことはできませんequal。単にnullと比較してください。

if(sList.get(i) == null){
    println("done.");
}else{
    println("get: "+sList.get(i) + " pos: " + i);
}

readyクラスの関数をループで使用することをお勧めBufferedReaderwhileます

while(rd.ready()){
   // read 
} 

ready()を参照してください

于 2012-09-28T20:07:41.837 に答える
0

bufferedReaderは、Stringの値を「null」として格納します。br.readLine()が空の場合はnullではありません。

だからチェックしてみてください

(!Stringval.equalisIgnoreCase("null"))

それ以外の

(Stringval != null) or (Stringval.equalsIgnoreCase(null))
于 2014-07-17T03:02:10.883 に答える