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

以这样的程序,如何输出前三名。

public static void main(String[] args) { 

    HelloWord hello=new HelloWord();

    hello.score();


}

public void score() {

int max=0;

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

for(int i=0;i<score.length;i++){

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

if(max < score[i]) {

max=score[i];

}

}

}

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

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

System.out.println(max);

}

}

}


提问者:慕粉4333732 2018-10-01 12:00

个回答

  • 慕尼黑0191331
    2018-10-07 01:44:46

    还有一种方法 改前面的for循环

    代码如下:

    public void score() {

    int max=0;

    int[] max=new int[3];  //取前3,因此数组长度为3

    int count=0;  //该变量代表有效值次数

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

    Arrays.sort(score); // 给数组score从低到高排序,第一行上边要有import  java.util.Arrays;

    for(int i=0;i<score.length;i++){

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

    if(max < score[i]) {

    max=score[i];

    }

    改为:

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

    continue;

    }     //跳过无效值

    count++;  //遍历一个有效值,有效值次数加1 

    if(count>=3){

    break;

    }

    max[count-1]=score[i];  //此时count的值为1到3,赋值之后的数组max中的值从大到小排列

    }

    }

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

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


    System.out.println(max);

    }

    }



  • 慕尼黑0191331
    2018-10-07 01:29:32

    把max定义为数组

    代码如下

    public void score() {

    int max=0; //这个注释掉

    int[] max=new int[]; 

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

    for(int i=0;i<score.length;i++){

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

    if(max < score[i]) {

    max=score[i];

    }

    改为:

    max[i]=score[i];   //这时数组max里的值都为有效数值

    }

    }

    Arrays.sort(max); //给数组max排序,从低到高

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

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


    System.out.println(max);

    }

    改为:

    for(int x=max.length-1;x>max.length-4||x>=0;x--){   //输出数组后三个数值,若数组中的数值数量小于3,则输出全部数值

            System.out.println(max[x]);

    }

    }


  • 莫莫咖Sama
    2018-10-03 14:38:16

    你在if条件下给max赋了值,max就会一直变到循环结束,之后成为一个定值,比如一百以内最大值是89,max则在89时就不会变化。以至于在下面输出时候只能输出三个89。在这种前提下只是取出数组中一百以内的最大值,不能得到一百以内的前三大的值。

  • 慕莱坞2475322
    2018-10-02 09:33:53

    按你这个自己定义的方法是无法输出前三名的,只能输出三次同一个最大值