在一个数组中找到三个最大的整数

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);
        
    }

}

我已经能够计算出最大的两个整数,但无法计算出最大的三个,如何只遍历一次数组并编写代码?


你的第一个条件应该在将 max2= max1 设置之前先设置 max3= max2 - GriffeyDog
3个回答

4
在第一个“if”语句中,你没有包含:
max3 = max2

1
我的第一次尝试是在一个if循环中完成所有操作,使用您建议的语句。但是那也不能正常工作。 - Hazar Ulaş
2
@HazarUlaş 在 if(max1 < test[i]) { 下面添加 max3 = max2 就可以解决问题了,所以如果你添加了这个缺失的行但仍然无法解决问题,我不知道你是在哪里添加的。 - Andreas

1

我会使用来完成这项工作:

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

肯定的是,在许多情况下,它会让你的生活变得更轻松... ;) - Oboe
如果你指的是数组中最大的整数,那么这个流正好可以做到。如果你将limit(3)改为limit(4),它将打印出4个最大的整数。如果你需要一个数字列表而不是字符串,那非常简单。 - Oboe
1
这对我来说不是一个任务,我只是在网上解决练习题。 - Hazar Ulaş
@Andreas,谁说这是一个任务了?如果这是一个任务,我的建议是尝试自己解决它,而不是寻求帮助。 - Oboe
@Oboe 但是原帖作者已经尝试过了,遇到了困难并在这里寻求帮助。 - f1sh
显示剩余6条评论

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接