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

来源:7-1 编程练习

zsqangle

2016-03-13 17:22

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回答

  • qq电子时代
    2016-03-13 20:08:49
    已采纳
    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],再在前面调用,这个你没写错  就不说了



    zsqang...

    非常感谢!!!!

    2016-03-14 20:55:46

    共 1 条回复 >

  • zsqangle
    2016-03-14 21:01:21

    最后改成了这样,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;

                }

             }

      }

           }

    }


  • nosilence
    2016-03-13 20:36:29

    你这样写肯定不行的。

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

    zsqang...

    谢谢!!!!!

    2016-03-14 21:00:04

    共 1 条回复 >

  • qq电子时代
    2016-03-13 20:12:44

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

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

  • qq电子时代
    2016-03-13 20:10:09

    有相应的变量    num是变量

  • 米路
    2016-03-13 19:13:21

    额,还要改

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

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

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


  • 米路
    2016-03-13 19:07:23

    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]);  

                }

            }

            

        }

     }



  • 慕姐1097149
    2016-03-13 18:26:16

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

Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165561 学习 · 17587 问题

查看课程

相似问题