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

帮忙看看为什么错吧,脑子无法思考了

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.topThree(scores);

        

    }

    

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

    

    public void topThree(int[] scores){

        Arrays.sort(scores);

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

        if(scores[i]>=0 && scores[i]<=100){System.out.println("考试成绩的前三名为:");

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

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

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

        }

        }

        

        }


正在回答

8 回答

  1. 将负数和过一百的抛出   就是-23和119

    用if语句  抛出是continue  

    抛出后所有的都留下   你使用的是大于0&&小于100

    这样对后面的施行方法无法进行具体编程

    合适的进行输出  不合适的没写怎么进行处理

    而如果用抛出   不合适的抛出了   合适的下面接着处理

    抛出语句是

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

    continue    

    }

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

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

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

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

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

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

    你这样不对     你应该

    private void score(int[] scores) {           //定义方法

           Arrays.sort(scores);                        //遍历数组           这俩你也写了

           int num=0;                                    //定义名次    初始化为0

           for(int i=scores.length-1;i>0;i--){               //定义i   对数组倒叙开始

                  if (scores[i]<0 || scores[i]>100){          //前面说的抛出不正常数字

                        continue;

                        }

                  num++;                         //i 减个1   num减个1   当i 进行三个时   num为3   前三名就确定了

                  if (num>3) {                   //当num大于3后  不在进行   断开方法为break

                         break;

                        }

                  System.out.println(scores[i]);               //i  进行了3位    输出数组

                  }   

                  思路:题意输出前三名,当出现数字时绝对会有相对应的常量    咱们设置的是num

                           在对正确数字进行选择时要先将异常数字抛出  就是前面说的continue

                           遍历数组你知道了,也知道从后向前取值,所以取值就从数组最后一位length-1开始一直到0

                          不能自己中断要一直到0,要靠条件自动停止,条件就是num>3,  当大于3时取值结束

                          方法返回值为scores[i],再在前面调用,这个你没写错  就不说了



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

zsqangle 提问者

非常感谢!!!!
2016-03-14 回复 有任何疑惑可以回复我~

最后改成了这样,OK了。谢谢nosilence和各位的回答!

import java.util.Arrays;

public class HelloWorld {

//完成 main 方法

    public static void main(String[] args) {

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

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

        HelloWorld hello=new HelloWorld();

            hello.topThree(scores);   

    }

    

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

    

    public void topThree(int[] scores){

        Arrays.sort(scores);

        int jj=0;

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

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

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

        int countt=++jj;

            if(countt>2){

            break;

            }

         }

  }

       }

}


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

你这样写肯定不行的。

sort排序后是升序,即从大到小,为了输出成绩最高的前三个,理论上是要输出后面的三个,又因为数据里面有无效的数据(比如小于0;大于100),因此倒叙取后面的数据的时候,要检验成绩是否0>=0 && <=100,符合条件的输出,并用一个int计数器来存储已经输出了的有效成绩个数,每次输出就++,满3个了就break出循环,结束。

1 回复 有任何疑惑可以回复我~
#1

zsqangle 提问者

谢谢!!!!!
2016-03-14 回复 有任何疑惑可以回复我~

从length-1到0    为for(int i=length-1;i>0:i--)

i要大于0   不能大于等于   这样当i为0时还会减1   

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

有相应的变量    num是变量

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

额,还要改

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

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

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


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

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.topThree(scores);

        

    }

    

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

    

    public void topThree(int[] scores){

        Arrays.sort(scores);

/*只是将你的for终止条件改变,你的循环只需要运行两次就得出结果了,但不具有普适性,如果前两个都大于100就不行了。

http://www.imooc.com/qadetail/124709  看下我的,还有标准答案 */

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

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

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

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

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

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

            }

        }

        

    }

 }



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

既然是for循环。何必要scores[i-1],scores[i-2],scores[3]呢,直接scores[i]就可以了。

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

举报

0/150
提交
取消

帮忙看看为什么错吧,脑子无法思考了

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