2016-10-04 50 views
-1

我使用FindBugs來檢測代碼包含的錯誤。我已經找到了一些解決方案,但是,我不明白爲什麼它仍然顯示檢查「微」的行中的「可能的空指針取消引用」錯誤。在while循環中,我已經顯示我的輸入應該與空值不同,但是它仍然顯示存在錯誤。如果可能,你能告訴如何解決這個問題嗎?提前致謝!代碼如下:Findbugs Java中可能的空指針取消引用

import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.nio.charset.Charset; 


public class FindBug { 

    public static void main(String args[]) 

    { 


     InputStreamReader reader = new InputStreamReader(System.in,Charset.defaultCharset()); 
     BufferedReader bufferedreader = new BufferedReader(reader); 

     String scan = null; 

     boolean nextfound=false; 

     try 
     { 
      while(null!=(scan= bufferedreader.readLine())&&nextfound) 

      { 
       scan=scan.replace('i', 'a'); 

      } 
     } 
     catch (IOException ioex) 
     { 
      System.err.println(ioex.getMessage()); 
     } 

     if (scan.equals("micro")) 
     { 
      System.out.println("The result is macro!"); 
     } 


     else 

     { 
      System.out.println("Something else!"); 
     } 
    } 
} 
+2

'readLine()'拋出異常 – chrylis

+0

您的while條件可能失敗,在這種情況下,掃描字符串將爲空。 –

+0

'readLine()'拋出一個'IO異常',修復這個'finally'塊的使用,關閉'finally塊'中的'br'。 –

回答

2

scan可能是null,也許你可以簡單地反轉測試

if ("micro".equals(scan){ 
    System.out.println("The result is Macro!") 
} 

,也有一些失誤:

scan=scan.replace('i', 'a');永遠不會被執行,因爲nextfound是總是false

while(null!=(scan= bufferedreader.readLine())&&nextfound) 
{ 
    scan=scan.replace('i', 'a'); 
} 

bufferReader永遠不會關閉,你應該在你的代碼添加finally

... 
catch (IOException ioex) { 
    System.err.println(ioex.getMessage()); 
} finally { 
    try { 
     reader.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
0

如果你的輸入是空的,那麼你的while循環將不會執行。 scan將被設置爲null,並且瞧,NullPointerException