如何在List / ArrayList中查找事件

时间:2013-12-17 21:01:58

标签: java arraylist find-occurrences

我有一个关于如何查找列表中出现次数的问题。在我的情况下,对于我的程序的一部分,我试图找到飓风类别的1,2,3和4的出现次数并显示它们。我尝试使用for循环和if语句,但是当我运行它时,输出为0。我怎样才能解决这个问题?任何帮助将不胜感激。以下是我的程序片段:

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)

4 个答案:

答案 0 :(得分: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)

您需要更新循环中正在检查的内容。因为它代表循环的每次迭代都在检查相同的值。

你可能想要一个

category.get(j) == 1 

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

答案 2 :(得分:1)

移动线

int category1 = category.get(i);

向下一行,使其位于循环内,并将i更改为j。这样,你每次都会检查一个不同风暴的类别,而不是一遍又一遍地看第一场风暴。

答案 3 :(得分:1)

使用Collections.frequency()

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