2013-12-17 40 views
0

我有一個關於如何查找列表中出現次數的問題。就我而言,對於我的部分程序,我試圖找出颶風類別1,2,3和4的出現次數並顯示它們。我嘗試使用for循環和if語句,但是當我運行它時,輸出爲零。我怎樣才能解決這個問題?任何幫助將不勝感激。下面是我的程序的一個片段:如何查找List/ArrayList中的出現

Hurricanes2.java:

// category 1 occurrence 
    int i = 0; 
    int ii = 0; 
    int category1 = category.get(i); 
    for(int j = 0; j < category.size(); j++){ 
     if(category1 == 1){ 
      ii++; 
     } 
    } 
System.out.printf("%1s%10d%n", "Category 1 occurrence ~", ii); 

,當我跑得到這樣的:

run: 
         Hurricanes 1980 - 2006 

Year   Hurricane   Category  Pressure(mb) Wind Speed (mph) 
____________________________________________________________________________________ 
1980    Allen     2     100     945 
1983    Alicia     2     100     962 
1984    Diana     2     100     949 
1985     Bob     1     65    1002 
1985    Danny     1     80     987 
1985    Elena     2     100     959 
1985    Gloria     1     90     942 
1985    Juan     1     75     971 
1985    Kate     1     85     967 
1986    Bonnie     1     75     990 
1986    Charley     1     65     990 
1987    Floyd     1     65     993 
1988   Florence     1     70     984 
1989    Chantal     1     70     986 
1989    Hugo     3     120     934 
1989    Jerry     1     75     983 
1991     Bob     1     90     962 
1992    Andrew     4     145     922 
1993    Emily     2     100     960 
1995    Erin     1     85     973 
1995    Opal     2     100     942 
1996    Bertha     1     90     974 
1996    Fran     2     100     954 
1997    Danny     1     70     984 
1998    Bonnie     1     95     964 
1998    Earl     1     70     987 
1998    Georges     1     90     964 
1999    Bret     2     100     951 
1999    Floyd     1     90     956 
1999    Irene     1     70     987 
2002    Lili     1     80     963 
2003   Claudette     1     80     979 
2003    Isabel     1     90     957 
2004    Alex     1     70     972 
2004    Charley     4     130     941 
2004    Gaston     1     65     985 
2004    Frances     1     90     960 
2004    Ivan     2     105     946 
2004    Jeanne     2     105     950 
2005    Cindy     1     65     992 
2005    Dennis     4     130     930 
2005    Emily     4     135     929 
2005    Irene     1     85     975 
2005    Katrina     4     150     902 
2005    Maria     2     100     960 
2005    Nate     1     80     979 
2005    Ophelia     1     80     976 
2005   Phillipe     1     70     985 
2005    Rita     4     150     897 
2005    Stan     1     70     979 
2005    Vince     1     65     987 
2005    Wilma     4     150     882 
2005    Beta     2     100     960 
2005    Epsilon     1     75     979 
2006    Ernesto     1     65     995 
2006   Florence     1     80     972 
2006    Gordon     2     105     955 
2006    Helene     2     110     954 
2006    Isaac     1     75     985 
____________________________________________________________________________________ 
Average ~         1     91     963 
Maximum ~         4     150    1002 
Minimum ~         1     65     882 
Category 1 occurrence ~   0 
BUILD SUCCESSFUL (total time: 0 seconds) 
+0

'INT類別1 = category.get(ⅰ);'在循環之前評估,當'i'爲0移動它在循環內。 – njzk2

回答

1

使用Collections.frequency()

實施例:int frequency = Collections.frequency(category, category1)

+1

這將需要四次迭代才能得到所有四個類別,看起來很浪費。 –

+0

+1不錯!我認爲第二個參數應該只是'1',而不是'category1'。 –

1

你需要更新你的循環內檢查什麼。就目前而言,循環的每次迭代都會檢查相同的值。

你可能需要一個

category.get(j) == 1 

if (category.get(j) <= 4) 
4

使用int[]作爲計數器,就像這樣:

// we won't use the 0 position 
int[] counter = new int[5]; 

遍歷所有的類別。每當你發現一個新的類別,添加一個計數器:

for (int i = 0; i < category.size(); i++) { 
    int cat = category.get(i); 
    // assuming that cat is 1, 2, 3 or 4 
    counter[cat]++; 
} 

當迭代結束,counter[1]將持有第一類出現的次數,counter[2]將舉行第二類出現的次數,等等。

+1

+1這似乎是最好的答案,尤其是考慮到效率。 –

1

招行

int category1 = category.get(i); 

下了線,使得它的內循環,並改變ij。這樣,你每次都會檢查一個不同風暴的類別,而不是隻是一遍又一遍地看第一場風暴。