我得到了一个 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/