我正在尝试迭代一个名为students
的数组for (int i1 = 0; i1 < students.length - 1; i1++) {
for (int j = i + 1; j < students.length; j++) {
if (i1 == j) {
如果数组中的元素出现在我第一次“做某事”时,第二次出现时“我想做其他事情”
答案 0 :(得分:1)
您应该在迭代时保留一组您已经看过的项目。一些事情:
Set<Student> seenStudents = new HashSet<>();
for (int index = 0; index< students.length; index++) {
Student student = students[index];
if (seenStudents.add(student)) {
// do something
} else {
// I want to do something else
}
}
Student
类(或students
的任何组件类型)必须实现hashCode
和equals
才能生效。
请注意,// I want to do something else
将在同一student
的第2个,第3个等同时执行。如果您希望仅在第二次遭遇时执行它,则需要计算出现次数(例如在Map<Student, AtomicInteger>
中)。但是,我认为你并没有将“第二次”解释得太严格,所以我会把它留给那套。
答案 1 :(得分:0)
首次传递将值存储在计数器(哈希映射)
中HashMap<String, Integer> counter = new HashMap<>();
for (int i = 0; i < students.length ; i++){
if (counter.get(students[i]) == null)
counter.put(students[i], 1);
else
counter.put(students[i], counter.get(students[i]) + 1);
}
第二遍根据值freq
执行某些操作for (int i = 0; i < students.length ; i++){
if (counter.get(students[i]) > 1)
// do something
else
// do something else
}
假设学生数组是字符串数组
答案 2 :(得分:-1)
//this is an javascript code
var alreadyProccessedArrElem=[]
for (int i1 = 0; i1 < students.length - 1; i1++)
{
if(alreadyProccessedArrElem.length>0)
{
if(alreadyProccessedArrElem.indexOf(i1)<=-1)
{
var firstOccurence = students.indexOf(i1);
var lastOccurence = students.lastIndexOf(i1);
if(firstOccurence>-1)
{
//do something
}
if(lastOccurence>-1)
{
//do something else
}
alreadyProccessedArrElem.push(i1);
}
}
}
答案 3 :(得分:-2)
保留逗号分隔的事件列表。每次遇到阵列中的新项目时都要计算。示例(请使用伪代码)。
var commalist = ""
for (int i1 = 0; i1 < students.length - 1; i1++) {
commalist += (commalist.length > 0?",":"") + "'" + students[i1] + "'";
<Count Occurences of 'Student_Name' into var occurrenceCount;>
switch(occurrenceCount)
{
case 1:
<First Action>
break;
case 2:
<Second Action>
break;
case 3:
<Third Action>
break;
}
}
希望这有帮助