温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Count same values in a row of an ArrayList
arraylist for-loop if-statement java jsp

java - 在ArrayList的一行中计数相同的值

发布于 2020-04-12 11:31:58

我得到了一个由2种类型的值组成的ArrayList:赢与输。我正在尝试计算在ArrayList中连续发生一次获胜的次数。到目前为止,我还无法完成任务。

ArrayList <String> wins = new ArrayList<String>();
System.out.print(wins);
//[Won, Won, Won, Loss, Loss, Won, Won, Loss, Loss, Loss, Loss, Loss, Won, Won, Won, Won, Won, Loss]

String value = wins.get(0);

int maxValue=1;
int count = 1 ;

for (int i=1; i<wins.size(); i++){
     if(wins.get(i) == wins.get(i-1)){      
        count++;       
        if(count >= maxValue){
            maxValue = count;
            value = wins.get(i);
        }
    }
}

System.out.println(value + " : " + maxValue );
// Won : 1

结果显然是错误的,因为在ArrayList的某个位置连续四次赢得胜利。谁能帮我解决这个问题?

查看更多

提问者
egx
被浏览
81
NoDataFound 2020-02-02 22:37

您应该尝试使用等号而不是引用==等号:

if(wins.get(i) == wins.get(i-1)){  

应该:

if(wins.get(i).equals(wins.get(i-1))) {  

考虑到常量是常量,为什么这可以与String一起使用,但情况并非总是如此。

最后但并非最不重要的一点是,当相等不匹配时,您必须重置计数!

如:

for (int i=1; i<wins.size(); i++){
  String current = wins.get(i);
  if (current.equals(wins.get(i-1))) {      
    count++;       
    if(count >= maxValue){
      maxValue = count;
      value = current;
    }
  } else {
    count = 0;
  }
}

请注意,您可能根本不需要value