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

标签 java arrays sorting find-occurrences

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

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

最佳答案

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

我已将代码更改/简化为

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 或其他名称会更直观,因为它可以容纳第一个或第二个数字。

关于java - 如何打印数组中出现的所有最大的两个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58144107/

相关文章:

c - 需要将字符串值存储到 int 中而不是 4 字节大小的 char 数组中

c++ - vector 的排序

java - CXF 中的响应超时属性

java - 为什么 '/test' 变为 'localhost:8080/test' 而不是 'localhost:8080/rootcontext/test'

ios - 如何在swift中过滤json对象?

arrays - 如何在函数中取消嵌套数组?

c# - 使用 C# 将数据表中的字符串项排序为 int

linux - 如何对群组中的用户进行排序?

java - 与流被关闭相关的奇怪错误

java - 使用 @MockBean 作为列表