为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么第三个for循环没有实现排序,或者说有更好的排序代码吗

import java.util.Arrays;
public class HelloWorld {
    public static void main(String[] args) {
        HelloWorld hello = new HelloWorld();
        int[] rank = {89, -23, 64, 91, 119, 52, 73};
        hello.getArrays(rank);
    }//定义方法完成成绩排序并输出前三名的功能
    public int[] getArrays(int []rank) {
        int max3=rank[0];
        int max2=rank[0];
        int max1=rank[0];

        int[] nums = {1, 2, 3};

        for (int i = 0; i < rank.length-1; i++) {
            if (rank[i] > 1 && rank[i] < 100) {
               if (rank[0] < rank[i]) {
                max1 = rank[i];
            }
        }
        }
        for (int i = 0; i < rank.length-1; i++) {
            if (rank[0] <rank[i]&&rank[i]<max1) {
                if (rank[i] > 1 && rank[i] < 100) {
                    max2 =rank[i];
                }
            }
        }
        for(int i=1;i<rank.length;i++){
            if(rank[i]>rank[i]){
                max3=rank[i];
            }
        }
        nums[0]=max1;nums[1]=max2;nums[2]=max3;
        System.out.println(Arrays.toString(nums));
        return nums;
    }
}

输出是91 89 89?

正在回答

3 回答

不需要去给它定义三个初始值,定义一个就够了

        int max3=rank[0];
        int max2=rank[0];
        int max1=rank[0];
其次 int[] nums = {1, 2, 3};既然只定义了一个初始值来接收,就不需要在创建一个数组了
还有一个很重要的,(rank[i] > 1 && rank[i] < 100)  &&的意思是必须满足两边的表达式才会被执行,仔细看,有什么数是大于1同时又小于100的,没有。所以在这里,可以用 || 来运算,||的意思是两边表达式只要满足一边就行了。

还有很多地方也不对,但是我懒的打字了。

0 回复 有任何疑惑可以回复我~

写的这么复杂,如果你想用这种,就先定义一个方法,再定义一个方法调用你前面的那个方法

2 回复 有任何疑惑可以回复我~
int max3=rank[0];  //rank[0]等于89  max3=89
for(int i=1;i<rank.length;i++){
         //相同数比较       
    if(rank[i]>rank[i]){
    //没有进入
    max3=rank[i];
    }
}
max3没有被重新赋值


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问为什么第三个for循环没有实现排序,或者说有更好的排序代码吗

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信