2015-06-17 155 views
-2

無論我嘗試了什麼,我總是得到nullpointerexception。如果需要可以提供更多的代碼。for-each循環NullPointerException

public int howManyBetweenTheseYears(int startYear, int endYear){ 
    ArrayList<Lamborghini> selectedCars = new ArrayList<Lamborghini>(); 

    for(Lamborghini c : inventory){ 
     if(c == null){ 
      continue; 
     } 
     if(c.getModelYear()>= startYear && c.getModelYear()<= endYear){ 
      selectedCars.add(c); 
     } 
    } 
    return selectedCars.size(); 
} 
+3

你在哪一行獲得NPE? – Jens

+1

從哪裏得到循環中的庫存 –

+1

爲什麼如果你只是返回這個列表的大小,你爲什麼超載你的邏輯與將汽車添加到數組列表?爲什麼不使用計數器? –

回答

0

對不起,我不能回覆你們,我意識到我留下的代碼沒有競爭,但我終於明白了什麼是錯的,它對我沒有意義,但它確實解決了問題,問題甚至不在我發佈的方法中。

我原本(ArrayList的蘭博基尼)當我在初始化庫存的ArrayList:

public class LamborghiniCarLot 
{ 
private String lotName; 
private ArrayList<Lamborghini> inventory; 

public LamborghiniCarLot() 
{ 
ArrayList<Lamborghini> inventory = new ArrayList<Lamborghini>(); 
} 

public LamborghiniCarLot(String lotName){ 
    ArrayList<Lamborghini>inventory = new ArrayList<Lamborghini>(); 
    setLotName(lotName); 

然後我試圖庫存之前刪除(ArrayList的蘭博基尼),並將其固定的一切:

public LamborghiniCarLot() 
{ 
    inventory = new ArrayList<Lamborghini>(); 
} 

public LamborghiniCarLot(String lotName){ 
    inventory = new ArrayList<Lamborghini>(); 
    setLotName(lotName); 

如果有人能夠向我解釋什麼是變化的,以及爲什麼在庫存之前不會與ArrayList蘭博基尼合作,我們將不勝感激。我是編程新手,請詳細說明。

0

它看起來像inventory爲空。如果getModelYear返回null,

+0

如果庫存是空列表,我不認爲會有NPE。它應該是空的。 – Codebender

0

2個Posibilities: -

  1. 主要是你的清單對象引用爲null

  2. 你如果代碼 -

    if(c.getModelYear()> = startYear & & c.getModelYear()< = endYear)

相反,如果低於上述嘗試 -

if(((c.getModelYear()!=null)?c.getModelYear():0)>=startYear&& 
     c.getModelYear()<= endYear) 

我Assusming你在 'startYear' 和 'endYear' 除了零一些應有的價值。

0

,如果你可以使用Java 8下面的代碼應工作:

if(inventory==null){ 
     return 0; 
} 
return inventory.stream().filter((Lamborghini c)-> c!=null && c.getModelYear()>= startYear && c.getModelYear()<= endYear).count(); 

,但沒有你告訴我們究竟在何處空指針正在發生的事情,它只是在黑暗中拍攝。

0

你不是兩個ifs。因爲「for」循環只會繼續每個c值。

public int howManyBetweenTheseYears(int startYear, int endYear) 
{ 
    ArrayList<Lamborghini> selectedCars = new ArrayList<Lamborghini>(); 

    for(Lamborghini c : inventory) 
    {  
     if(c.getModelYear()>= startYear && c.getModelYear()<= endYear) 
     { 
      selectedCars.add(c); 
     } 
    } 
    return selectedCars.size(); 
} 

也有保存返回值的變量,並通過給予大小0否則會給你NullPointerException - 如果不能找到任何匹配的車啓動了。