大神们帮忙看看,错在哪里

来源:7-1 编程练习

慕用831298

2017-06-21 20:16

import java.util.Arrays;
public class ImoocJava {
	public static void main(String[] args) {
	int [] scores = {89,-23,64,91,119,52,73};
	System.out.println("考试成绩的前三名为:");
	int [] top = getTop3(scores);
	System.out.println(Arrays.toString(top));
		
	}
	public static int [] getTop3(int [] scores){
		Arrays.sort(scores);
		int count = 0;
		int [] cj = new int [3];
		for(int i = scores.length-1;i>=0;i--){
			if(scores[i]<0||scores[i]>100){
				continue;
			}
			count ++;
			for (int j = 0;j<=2;j++){
				cj[j] = scores[i];
			}
			if (count>3){
				break;
			}
		}
		return cj;
	}
}



写回答 关注

10回答

  • qq_正方形龙瞎_0
    2017-07-09 15:44:16

    我认为你要加个HelloWorld main=new HelloWorld();

    int [] top = main.getTop3(scores);

  • 慕先生2225934
    2017-07-01 05:02:00

    额对了,明明不需要返回值到main函数里面就不要多写几行无意义的代码,直接在方法里输出就行了。增加可读性。

  • 慕先生2225934
    2017-07-01 04:53:13

    你这就是把简单问题复杂化而已 问题在于方法里最后那个if count>3。应该把count初始化值改为1或者把那个if搞到最外层(for的下一层)这样才不会执行多一次把第四名打印出来。

    你也可以看看我的,思路清晰,实用。写程序不是只是实现功能就万事大吉的了还要有维护性可读性。能不绕圈就尽量简洁明白。

    import java.util.Arrays;

    public class HelloWorld 

    {//1

    public static void main(String[] args)

    {//main

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

    HelloWorld L1=new HelloWorld();

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

    L1.score(scores);

    }//main

    public void score(int[]shu)

    {//方法score   

    int j=0;

    Arrays.sort(shu);

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

    {   

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

    j++;

    System.out.println(shu[i]);}

    if(j==3)

    break;

    }

    }//方法score

    }//1


  • 忆_卿
    2017-06-29 00:16:14

    上面回答  有点地方数据写错了,思路是这样的。

  • 忆_卿
    2017-06-29 00:09:58

    首先为什么会输出3个一样的呢? 问题在于内层for循环

      for (int j = 0;j<=2;j++){

                    cj[j] = scores[i];

                }

    j=0;j<=2;运行一次 cj[j]=scores[i]; 也就是cj[0]=scores[6];j++; j=1;j<=2; cj[i]=scores[6];类推;

    为什么输出会是 64  而不是91呢,外层for循环 ,i=6;i>=0;score[i]=91;不满足if条件,count++;

    然后运行 内层for循环  应该是输出 三个 91 ,但是 count不大于3 ,继续运行外层for循环 i--; i=5;i>=0;  score[5]=89;  89不满足if条件 count++;依次内推,一直运行到 count>3的时候 跳出。

  • 忆_卿
    2017-06-28 23:33:48

    import java.util.Arrays;

    public class HelloWorld {

        //完成 main 方法

        public static void main(String[] args) {

              HelloWorld  hello=new HelloWorld();

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

            int[] scores=hello.getScores(score);

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

            System.out.println(Arrays.toString(scores));  

        }

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

       public int[] getScores(int[]  score){

    int count=0;

    int [] scores=new int[3];

    Arrays.sort(score);

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

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

    continue;

    }else if(count<3){

    scores[count]=score[i];

    count++;

    }

    }

    return scores;

    }

    }



  • 在我的BGM里没有人能够打败我
    2017-06-25 09:49:32

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

                    continue;

                }else if(count == 3){

                break;

                }else{

                cj[count] = scores[i];

                count++;

                }

    你for循环改成这样试试  我这边刚试了可以了

  • 小木木_
    2017-06-22 09:13:42

    http://img.mukewang.com/594b19a10001c76b05580300.jpg哪有这么麻烦  八九行就搞定了

    小木木_

    好吧 好吧 不知道题目 排除题目的话 还是简单点好 我记得我当时学java 的时候 老师说过 用最简单的代码写出最牛B的程序

    2017-06-29 12:22:56

    共 2 条回复 >

  • 说话的人
    2017-06-21 21:59:21

    你可以看一下课程的左下角有个 不会了怎么办” 图标,点开里面有正确答案,一步一步看着他的思路走。

    虽然你的整体不对,不过按照你的思路,你的19和20行的语句循环有错误,会一直覆盖。(仔细读你的19和20行的循环就知道了)

  • 慕圣0333365
    2017-06-21 21:41:46

    ImoocJava a=new ImoocJava();然后调用你的方法


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

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

1165537 学习 · 17586 问题

查看课程

相似问题