我试图迭代一个数组,如果一个元素出现不止一次,做一些不同的事情?

时间:2018-04-06 09:58:19

标签: java

我正在尝试迭代一个名为students

的数组
for (int i1 = 0; i1 < students.length - 1; i1++) {
   for (int j = i + 1; j < students.length; j++) {
        if (i1 == j) {

如果数组中的元素出现在我第一次“做某事”时,第二次出现时“我想做其他事情”

4 个答案:

答案 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的任何组件类型)必须实现hashCodeequals才能生效。

请注意,// 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;  
    }
}

希望这有帮助