如何打印数组中最大的两个整数的所有出现次数?

How do I print all the occurrences of the greatest two integers in an array?

我正在尝试打印整数数组中两个最高整数的出现次数,但输出结果始终是前三个。

Integer[] scores = {4,4,4,6,6,4,2,3};
        Arrays.sort(scores, Collections.reverseOrder());

        int flag = 0;
        System.out.println(scores[0]);
        int first = scores[0];

        for (int i = 1; i < scores.length; i++) {;
            if(first == scores[i]) {
                System.out.println(scores[i]);
            }else {
                first = scores[i];
                flag++;
                System.out.println(scores[i]);
            }
            if(flag == 2) {
                break;
            }
        }

是否有更好的打印方式?它们目前打印为 6 6 4 4 4 4 3。 正确的输出应该是 6 6 4 4 4 4

问题是 System.out.println(scores[i]) 在您将标志递增为 2 之后。当这是列表中的第三个数字时,您不应该打印。

我changed/simplified代码为

int flag = 0;
int first = scores[0];
for (int i = 0; i < scores.length; i++) {
    if(first != scores[i]) { //Encountering second number
        first = scores[i];
        flag++;
    }
    if(flag == 2) { //If already seen three numbers, break
        break;
    }
    System.out.println(scores[i]); //Good to print it
}

first重命名为number或其他名称更直观,因为它可以容纳第一个或第二个数字。

整数[] 分数 = {4,4,4,6,6,4,2,3}; Arrays.sort(分数, Collections.reverseOrder());

    int flag = 0;
    System.out.println(scores[0]);
    int first = scores[0];
    for (int i = 1; i < scores.length; i++) {;
        if(first == scores[i]) {
            System.out.println(scores[i]);
        }else if(first != scores[i] && flag == 0) {//you need to change this 
            first = scores[i];
            flag++;
            System.out.println(scores[i]);
        }else{ // if you dont want to traverse list after getting desired output
            break;
        }

    }

我更喜欢 int[] 而不是 Integer[],并向后迭代排序的数组。您实际上不需要 else 这里,只需检查您是否不在数组的末尾 - 如果您不检查当前分数是否与下一个分数不同(因为我们正在向后迭代).您只需要在满足该条件时测试 flag(并在第二次更改后测试 break)。喜欢,

int[] scores = { 4, 4, 4, 6, 6, 4, 2, 3 };
Arrays.sort(scores);
for (int i = scores.length - 1, flag = 0; i >= 0; i--) {
    if (i != scores.length - 1 && scores[i] != scores[i + 1]) {
        flag++;
        if (flag >= 2) {
            break;
        }
    }
    System.out.println(scores[i]);
}