2010-03-20 32 views
0

在另一種方法(ALGO_1)中,我搜索<background>的元素並檢查值H_NAME是否等於輸入到main中的值。當我嘗試運行代碼時,出現空指針異常。在嘗試打印(在System.out.println等中)每個for循環後面的H_NAME值時,我也會收到一條返回給我的空語句。NullPointerException:兩個集合和一個for循環

我相當確定這個集合根本不存儲掃描器收集的數據。但是當我用size()檢查收藏尺寸時,它的尺寸是正確的。

主要問題是:

  • 從readBackground方法是放錯了地方的data.add?
  • 是錯誤地簡單構造的片段?

當我使用System.out.println來檢查Background對象的值名稱,開始時間,增量等,他們打印出來很好。

for (Hydro hd: hydros) {   
    System.out.println(hd.H_NAME); 
    for (Background back : backgs) { 
     System.out.println(back.H_NAME); 
     if (back.H_NAME.equals(hydroName)) { //get error here 

      public static Collection<Background> readBackground(String url) throws IOException { 

       URL u = new URL(url); 
       InputStream is = u.openStream(); 
       InputStreamReader isr = new InputStreamReader(is); 
       BufferedReader b = new BufferedReader(isr); 
       String line =""; 
       Vector<Background> data = new Vector<Background>(); 
       while ((line = b.readLine())!= null) { 
        Scanner s = new Scanner(line); 
        String name = s.next(); 
        double starttime = Double.parseDouble(s.next()); 
        double increment = Double.parseDouble(s.next()); 
        double sum = 0; 
        double p = 0; 
        double nterms = 0; 
        while ((s.hasNextDouble())) { 
         p = Double.parseDouble(s.next()); 
         nterms++; 
         sum += p; 
        } 
        double pbmean = sum/nterms; 
        Background SAMP = new Background(name, starttime, increment, pbmean); 
        data.add(SAMP); 
       } 
       return data; 
      } 
+0

那麼,對於初學者,您可能想嘗試格式化代碼,使其更具可讀性。你也可以考慮讓我們看看其餘部分,因爲必須有一些東西丟失。 – 2010-03-20 01:58:34

回答

0

如果你得到一個NullPointerException(NPE)當你調用back.H_NAME.equals(xxx),它可能意味着要麼back爲空或back.H_NAME爲空。

你說當你打印back.H_NAME時,你會得到空,所以暗示back.H_NAME實際上是空的。您沒有向我們展示任何描述類Background的代碼,因此很難再給您任何幫助。

+0

真的,我以爲我可能錯過了一些東西。這是Background的代碼。謝謝。 公共課程背景{ \t String H_NAME; \t double T_START; \t double DT; \t double PBMEAN; \t \t \t \t 公共背景(字符串名稱,開始時間加倍,雙增量,雙pbmean){ \t \t 名稱= h_name複製; \t starttime = T_START; \t increment = DT; \t pbmean = PBMEAN; \t \t \t} } – Elliott 2010-03-20 10:20:59

+0

是的,我認爲它肯定是由時間,我得到的方法檢查h_name複製變量,我只是不能工作了,爲什麼空。因爲如果我打印出創建數據的方法的步驟肯定正在讀取...... – Elliott 2010-03-20 10:23:57