问答详情
源自:7-1 编程练习

代码通过了,但是运行结果不对,求大神指点迷津

import java.util.Arrays;

public class HelloWorld {

    

    //完成 main 方法

    public static void main(String[] args) {

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

        HelloWorld hello=new HelloWorld();

        hello.scoresSort(scores,scores.length);

    }

    

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

    public void scoresSort(int[] scores,int num){

        int[] scoresCorrect=new int[num];

        Arrays.sort(scores);

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

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

                i--;

                continue;

            }else{

                scoresCorrect[j]=scores[i];

                i--;

            }

        }

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

        for(int i=scoresCorrect.length-1;i>=scoresCorrect.length-3;i--){

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

        }

    }

    

https://img1.mukewang.com/5c64d3890001a15004880184.jpg 这是我的错误的运行结果

https://img3.mukewang.com/5c64d38a0001b2cc04610181.jpg这是正确的结果


提问者:川谷不言寒水不归 2019-02-14 10:36

个回答

  • qq_棠梨煎雪故人来_03907185
    2019-02-15 12:20:09

    别说,你这bug挺多的。

    1)score<0||score>100,是或不是且

    2)for循环里第三项j++删掉,把j++加进else里;或者把j++改成i--,把句里的if和else里的i--全删掉,再把j++加进else

    3)你是先把原数组从小到大排序之后,再从尾到头有选择的放进correct数组里,所以correct数组本就已经是从大到小的顺序,你输出的时候应该从前向后输出,不是从后向前输出。

    发一个给你debug之后的版本:

    import java.util.Arrays;

    public class HelloWorld {

        

        //完成 main 方法

        public static void main(String[] args) {

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

            HelloWorld hello=new HelloWorld();

            hello.scoresSort(scores,scores.length);

        }

        

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

        public void scoresSort(int[] scores,int num){

            int[] scoresCorrect=new int[num];

            Arrays.sort(scores);

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

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

                    i--;

                    continue;

                }else{

                    scoresCorrect[j]=scores[i];

                    i--;

                    j++;

                }

            }

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

            for(int i=0;i<3;i++){

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

            }

        }

    }

    另外你写这个好麻烦啊,直接输出就行没必要再列到数组输出;数组长度本就可以.length得到没必要再设一个参数;此外排序之后后面的数只可能大于100不可能小于零,不用判断是否小于零;最后,你只需要前三个,没必要把所有有效数字都排一遍。

    我发一下我写的吧。

    public void prints(int[] score){

        Arrays.sort(score);

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

        int i=score.length-1;

        for(int j=1;j<=3;i--){

        if(score[i]>100)

        continue;

        else

            {System.out.println(score[i]);j++;}

        }


  • 慕瓜2521358
    2019-02-14 13:44:39

     public static void main(String[] args) {
             int[] scores={89,-23,64,91,119,52,73};
             HelloWorld hello=new HelloWorld();
             hello.scoresSort(scores,scores.length-2);
         }
        
         //定义方法完成成绩排序并输出前三名的功能
         public void scoresSort(int[] scores,int num){
           int[] scoresCorrect=new int[num];
             Arrays.sort(scores);
             int i=0,j=0;
           for(i=0;i<scores.length;i++){
                 if(scores[i]>0 && scores[i]<100){
                  scoresCorrect[j] = scores[i];
                  j++; 
                 }
            } System.out.println("输出前三名成绩:");
                 for(j=scoresCorrect.length-1;j>=scoresCorrect.length-3;j--){
              System.out.println(scoresCorrect[j]);
             }
            }

  • 慕瓜2521358
    2019-02-14 13:41:35

    public static void main(String[] args) {
             int[] scores={89,-23,64,91,119,52,73};
             HelloWorld hello=new HelloWorld();
             hello.scoresSort(scores,scores.length-2);
         }
        
         //定义方法完成成绩排序并输出前三名的功能
         public void scoresSort(int[] scores,int num){
           int[] scoresCorrect=new int[num];
             Arrays.sort(scores);
             int i=0,j=0;
            while(i<scores.length){
                 if(scores[i]>0 && scores[i]<100){
                  scoresCorrect[j] = scores[i];
                  j++;
                  i++; 
                 }else{
                  i++;
                 }  
            } System.out.println("输出前三名成绩:");
                 for(j=scoresCorrect.length-1;j>=scoresCorrect.length-3;j--){
              System.out.println(scoresCorrect[j]);
             }

           
             }