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

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

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

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

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

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

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

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

你这就是把简单问题复杂化而已 问题在于方法里最后那个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


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

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

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

首先为什么会输出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的时候 跳出。

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

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;

}

}



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

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

                continue;

            }else if(count == 3){

            break;

            }else{

            cj[count] = scores[i];

            count++;

            }

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

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

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

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

忆_卿

根据题目要求来,要创建一个方法。 。。
2017-06-28 回复 有任何疑惑可以回复我~
#2

小木木_

好吧 好吧 不知道题目 排除题目的话 还是简单点好 我记得我当时学java 的时候 老师说过 用最简单的代码写出最牛B的程序
2017-06-29 回复 有任何疑惑可以回复我~

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

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

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

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


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

举报

0/150
提交
取消

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

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