我得到了一个由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的某个位置连续四次赢得胜利。谁能帮我解决这个问题?
您应该尝试使用等号而不是引用==
等号:
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
。
谢谢。我还是个新手,但这很有意义。但是,我想问一下您是否可以举一个例子,说明当我遇到不匹配时如何重置计数器?