在数组中查找最大 3 个整数

问题描述 投票:0回答:4

我试图找到数组中最大的三个元素。到目前为止,我已经想出了这个,但它不能正常工作(输出是 9 8 3):

public class Test {

    public static void main(String[] args) {
        int max1, max2, max3;
        int[] test= {2,4,8,3,9,1};
        
        max1= test[0];
        max2= test[0];
        max3= test[0];
        for(int i = 1; i < test.length; i++) {
            if(max1 < test[i]) {
                max2= max1;
                max1= test[i];
            }
            else if (max2 < test[i]) {
                max3= max2;
                max2= test[i];
            }
            else if (max3 < test[i]) {
                max3= test[i];
            }

        }
        System.out.println(max1 + " " + max2 + " " + max3);
        
    }

}

我已经设法完成最大的 2 个整数,但无法完成 3 个。如何仅使用数组的 1 次迭代来编写代码?

java arrays
4个回答
4
投票

在第一个“if”语句中不包括:

max3 = max2

1
投票

我会使用

stream
来完成这项工作:

int[] test= {2,4,8,3,9,1};

String maxValues = Arrays.stream(test).boxed()
        .sorted(Comparator.reverseOrder())
        .limit(3)
        .map(String::valueOf)
        .collect(Collectors.joining(" "));

System.out.println(maxValues);

输出

9 8 4

0
投票
    Arrays.sort(test);
    max1 = test[test.length - 1];
    max2 = test[test.length - 2];
    max3 = test[test.length - 3];
    System.out.println(max1 + " " + max2 + " " + max3);

0
投票
  private static int findThirdLargest(List<Integer> intList) {
        int max =0;
        int secondMax =0;
        int thirdMax = 0;
        for(Integer i: intList){
            if(i>max){
                thirdMax = secondMax;
                secondMax = max;
                max = i;
            }
            else if(i>secondMax){
                thirdMax = secondMax;
                secondMax = i;
            }
            else if(i>thirdMax){
                thirdMax = i;
            }

        }
        System.out.println(max);
        System.out.println(secondMax);
        System.out.println(thirdMax);
        return thirdMax;
    }
© www.soinside.com 2019 - 2024. All rights reserved.