代码应该将列表分成几组。如果ArrayList连续两次包含相同的字符串,它会将其索引添加到一个HashSet,否则索引将位于不同的HashSet中。重点是将ArrayList中所有相同字符串的索引放在同一个HashSet中,并将不同字符串中的索引放在不同的HashSet中。例如,程序应该打印[[0,1] [2,3]],但它会陷入无限循环。我放了一个print语句来验证前两个索引是否被添加到HashSet中,它们是什么。程序打印[[0,1]]而不是预期的结果。由于某种原因,list.get(index1).equals(list.get(index2))总是求值为true,即使我更新了循环中的索引,结果在第二次迭代时应为false。
package quiz;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;
public class Question {
public static void main(String[] args) {
Question q = new Question();
ArrayList<String> list2 = new ArrayList<String>();
list2.add("a");
list2.add("a");
list2.add("c");
list2.add("c");
System.out.println(q.answer(list2));
}
public HashSet<HashSet<Integer>> answer(ArrayList<String> list){
HashSet<HashSet<Integer>> hashSet = new HashSet<HashSet<Integer>>();
HashSet<Integer> set = new HashSet<Integer>();
Iterator<String> it = list.iterator();
int index1 = 0;
int index2 = 1;
while (it.hasNext()){
while (list.get(index1).equals(list.get(index2))){
set.add(index1);
set.add(index2);
if (index1<list.size()-2){
index1=index1+1;
index2=index2+1;
}
}
hashSet.add(set);
System.out.println(hashSet);
}
/*else{
set.add(i);
}*/
return hashSet;
}
}
答案 0 :(得分:1)
你得到一个无限循环因为你正在使用迭代器hasNext()但之后没有使用it.next()来向前移动索引。
此外,您并不真正需要迭代器,因为您没有使用这些值。你应该这样做:
while(shouldStop)
......
if (index1<list.size()-2){
index1=index1+1;
index2=index2+1;
} else {
shouldStop=true
}
........