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

求解啊 ,各位大佬大神!!

求解啊 ,各位大佬大神!!

Felix_Sun 2019-07-29 23:41:03
import java.util.Arrays; public class HelloWorld {          //完成 main 方法     public static void main(String[] args) {         System.out.println("考试成绩的前三名为:");         HelloWorld hello = new HelloWorld();                int[] scores = new int[]{89,-23,64,91,119,52,73};         int[] nums = new int[3];         nums = hello.sort(scores);                                }          //定义方法完成成绩排序并输出前三名的功能     public int[] sort(int[] scores){         Arrays.sort(scores);         int count = 0;         for(int i = scores.length-1;i>=0;i--){             if(scores[i]<0 || scores[i]>100){                 continue;                              }             else {                 count++;             }             if(count>3){                 break;             }             System.out.println(scores[i]);         }       return int[] nums;     }    这道题 我想用有返回值的方式去解决,我这样写为什么老是报错啊?
查看完整描述

1 回答

已采纳
?
安浪创想

TA贡献81条经验 获得超23个赞

这个代码真乱啊啊啊

错误分析:函数返回时直接返回数据就行,不需要再定义类型了,只有初始定义时候才需要在变量前加int[]这样的类型。

而且你的sort函数的返回值应该是 传入的 scores,而不是前面过程中的nums

代码如下:

import java.util.Arrays;

public class HelloWorld {


    //完成 main 方法

    public static void main(String[] args) {

        System.out.println("考试成绩的前三名为:");

        HelloWorld hello = new HelloWorld();


        int[] scores = new int[]{89, -23, 64, 91, 119, 52, 73};

        int[] nums = new int[3];

        nums = hello.sort(scores);


    }


    //定义方法完成成绩排序并输出前三名的功能

    public int[] sort(int[] scores) {

        Arrays.sort(scores);

        int count = 0;

        for (int i = scores.length - 1; i >= 0; i--) {

            if (scores[i] < 0 || scores[i] > 100) {

                continue;


            } else {

                count++;

            }

            if (count > 3) {

                break;

            }

            System.out.println(scores[i]);

        }

        return scores;

    }
}

而你的这个代码不够优化:

应该这样优化:

import java.util.Arrays;

public class HelloWorld {
    //完成 main 方法

    public static void main(String[] args) {
        System.out.println("考试成绩的前三名为:");
        int[] scores = new int[]{89, -23, 64, 91, 119, 52, 73};
        int[] nums = new int[3];
        nums = sort(scores);
        for (int rank :
                nums) {
            System.out.println(rank);
        }
    }
    //定义方法完成成绩排序并输出前三名的功能

    static int[] sort(int[] scores) {
        Arrays.sort(scores);
        int count = 0;
        for (int i = scores.length - 1; i >= 0; i--) {
            if (scores[i] < 0 || scores[i] > 100) {
                continue;
            } else {
                count++;
            }
            if (count > 3) {
                break;
            }
//            System.out.println(scores[i]); 这里是执行函数体,不要再这进行数据'使用'操作,应该把获得的数据返回去而不是在这列出来
        }
        return scores;
    }
}

执行结果为:

考试成绩的前三名为:
-23
52
64
73
89
91
119

你的算法是反的了,sort函数已经从低到高排序,你取最大数据并获得一个数据数组应该为:

import java.util.ArrayList;
import java.util.Arrays;

public class HelloWorld {
    //完成 main 方法

    public static void main(String[] args) {
        System.out.println("考试成绩的前三名为:");
        int[] scores = new int[]{89, -23, 64, 91, 119, 52, 73};
        ArrayList<Integer> nums = new ArrayList();
        nums = sort(scores);
        for (int i=1;i<=nums.size();i++){
            System.out.println("第"+i+"名:"+nums.get(i-1));
        }
    }
    //定义方法完成成绩排序并输出前三名的功能

    static ArrayList<Integer> sort(int[] scores) {
        Arrays.sort(scores);
        int count = 0;
        ArrayList<Integer> newTopScores = new ArrayList<>();
        for (int i = scores.length - 1; i >= 0; i--) {
            if (scores[i] < 0 || scores[i] > 100) {
                continue;
            } else {
                count++;
            }
            if (count > 3) {
                break;
            }
//            System.out.println(scores[i]); 这里是执行函数体,不要再这进行数据'使用'操作,应该把获得的数据返回去而不是在这列出来
//            把最大的添加到数组里保存起来
            newTopScores.add(scores[i]);
        }

        return newTopScores;
    }
}

运行结果为:

考试成绩的前三名为:
第1名:91
第2名:89
第3名:73


查看完整回答
1 反对 回复 2019-07-30
  • Felix_Sun
    Felix_Sun
    大佬 这么晚都在啊,辛苦啦。
  • Felix_Sun
    Felix_Sun
    可是有个地方没看懂啊,怎么第一次优化以后成绩顺序就反了呢? Arrays.sort(scores); int count = 0; for (int i = scores.length - 1; i >= 0; i--) 这个地方没毛病啊?
  • 安浪创想
    安浪创想
    Arrays.sort(scores)就是一个排序了,而且操作了原来变量的内存为升序了。如果要进行降序,新的for循环重新生成一个数组按照自己降序的需要添加元素进去,这里使用list,Java不允许修改数组长度。如果要数组定义也行,就前三名就定义三个元素长度的数组,依次修改元素为从大到小。 依次打印是可以按照降序打印的,但是函数的逻辑应该是获取是一个新的数据变量,而不是在函数中依次打印一遍就完了。所以我做了修改就是做个list生成一个新变量了
点击展开后面3
  • 1 回答
  • 0 关注
  • 451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信