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

标签 java jsp for-loop if-statement arraylist

我得到了一个 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 中的某个点连续发生了 4 次胜利。谁能帮我解决这个问题吗?

最佳答案

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

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

应该是:

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

为什么这可以用于字符串,因为常量是被保留的,但情况并非总是如此。

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

如:

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

关于java - 计算 ArrayList 中一行中相同值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026711/

相关文章:

Java把长if语句改成for循环

java - Pervasive 8 中的案例陈述

java - JUnit @Rule 生命周期与@Before 交互

java - 如何检查此复选框是否已从 Java 中的其他方法启用?

java - 如何迭代并从 session 中获取所有用户名

java - URL 太长时被截断

performance - 为什么 Matlab Profiler 说 'end' 循环的 'for' 语句存在瓶颈?

java - 如何在 Spring 5 Controller 中以声明方式使用 JWT 授权?

java - 如何将调用对象方法的 JSP servlet 转换为 JSTL?

c++ - 在 c++ 中,c 为什么 for 循环 block 内的条件和 for 循环内的条件行为不同?