2014-11-04 29 views
0
數組列表中的特定元素

我寫了一個方法,目的是計算的次數薯片的特定味道出現在點心機BlueJ提供如何找到的次數發生在Java中

public int countPacks(String flavour){ 

     int n = 0; 
     int nrFlavour = 0; 
     while(n < packets.size()) { 
      if(packets.get(n).equals(flavour)){ 
       nrFlavour++; 
       n++; 
      } 
      else n++; 
     } 
     return nrFlavour; 
} 

我有一個Arraylist'數據包',它包含具有特定風味的PackOfCrisps對象。然而,當我添加了三包「鹽」味薯片並運行此方法時,輸入「鹽」作爲味道,它只返回0,就好像沒有味道「鹽」的PackOfCrisps對象。 對不起,如果這沒有意義。我對Java很陌生,我試圖盡我所能解釋我的問題。 :)

+0

請提供完整的** **代碼示例說明你在問什麼。我們應該能夠複製並粘貼它,然後按原樣運行它。 (好吧,我們可以隨意刪除導入語句,因爲我們可以很容易地添加這些語句。)當其他人運行您提供的程序時,我們應該完全確定您所問的行爲。 – 2014-11-04 17:55:28

+1

數據包是ArrayList 還是ArrayList (或其他類型)?如果它不是'ArrayList ',那麼'equals'不會返回true。 (我不知道你的確切代碼,但你可以嘗試改變if(packets.get(n).equals(flavor)){'to'if(packets.get(n).flavour.equals(flavor)) {'。) – Pokechu22 2014-11-04 17:55:30

+0

顯示'數據包'是如何定義和填充的。 – tnw 2014-11-04 17:55:33

回答

2

列表packets包含PackOfCrisps對象,並且該方法採用String參數。因此,語句packets.get(n).equals(flavour)正在比較PackOfCrisps對象與String,因此計數變量永遠不會增加。

您需要的flavour字符串比較對象的特定領域,是這樣的:

if(packets.get(n).getFlavour().equals(flavour)){ 

在一個側面說明,你可以用一個簡單的for循環更換while環和刪除的增量n

0

這裏有一個內置的解決您的問題,您可以使用此method

你可以重寫你的countPacks方法是這樣的:

public int countPacks(String flavour){ 
    return Collections.frequency(packets, flavour); 
} 
相關問題