0

我運行代碼時出現此錯誤,但是編譯時沒有。如何修復線程「main」中的異常java.lang.NullPointerException

Exception in thread "main" java.lang.NullPointerException 
at java.util.StringTokenizer.<init>(StringTokenizer.java:199) 
at java.util.StringTokenizer.<init>(StringTokenizer.java:221) 
at WillinsLaMarkusFileInputOutput.main(WillinsLaMarkusFileInputOutput.java:23) 

這裏是我完整的代碼

import java.io.*; 

public class WillinsLaMarkusFileInputOutput { 

    public static void main(String[] args) throws IOException { 
     /* open the files */ 
     // Scanner sc = new Scanner(System.in); 
     BufferedReader r = new BufferedReader(new FileReader("input.txt")); 
     BufferedWriter w = new BufferedWriter(new FileWriter("output.txt")); 

     float[] values = new float[10]; 
     String str = r.readLine(); 
     int i = 0; 
     float sum = 0.0f, avg = 0.0f; 
     /* tokenize the string into floats separated by spaces */ 
     java.util.StringTokenizer tk = new java.util.StringTokenizer(str, " "); 
     while (tk.hasMoreElements()) { 
      values[i] = Float.valueOf(tk.nextToken()).floatValue(); 
      /* compute sum */ 
      sum += values[i]; 
      i++; 
     } 

     /* calculate average */ 
     avg = sum/10.0f; 

     /* write results to output.txt */ 
     w.write("Sum: " + sum); 
     w.newLine(); 
     w.write("Average: " + avg); 
     w.flush(); 

     /* close the files */ 
     r.close(); 
     w.close(); 
    } 
} 

關於如何解決此問題有什麼建議?

回答

0

例外,從該行雲:

java.util.StringTokenizer tk = new java.util.StringTokenizer(str, " "); 

那麼首先讓我們看documentation當此構造可能拋出NullPointerException

public StringTokenizer(String str, String delim)

拋出:

NullPointerException - 如果strnull

好。這意味着strnull。該str被分配在這條線:

String str = r.readLine(); 

現在你應該閱讀文檔時r.readLine()可能返回null

返回:

一個String包含該行的內容,但不包括任何行終止字符,或者如果已到達流末尾null

因此,它表示已達到文件結尾。由於這是第一次嘗試從這個文件中讀取某些內容,因此您似乎正在讀取一個空文件。

一般來說,仔細閱讀文檔可能會大大有助於理解您的程序無法工作的原因。

+0

你是說我應該向「input.txt」添加一些代碼。檔案?如果這個文件是一個txt文件而不是java類型的文件,那將如何工作? – lwillins

相關問題