慕用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; } }
我认为你要加个HelloWorld main=new HelloWorld();
int [] top = main.getTop3(scores);
额对了,明明不需要返回值到main函数里面就不要多写几行无意义的代码,直接在方法里输出就行了。增加可读性。
你这就是把简单问题复杂化而已 问题在于方法里最后那个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
上面回答 有点地方数据写错了,思路是这样的。
首先为什么会输出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的时候 跳出。
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;
}
}
if(scores[i]<0||scores[i]>100){
continue;
}else if(count == 3){
break;
}else{
cj[count] = scores[i];
count++;
}
你for循环改成这样试试 我这边刚试了可以了
哪有这么麻烦 八九行就搞定了
你可以看一下课程的左下角有个 “不会了怎么办” 图标,点开里面有正确答案,一步一步看着他的思路走。
虽然你的整体不对,不过按照你的思路,你的19和20行的语句循环有错误,会一直覆盖。(仔细读你的19和20行的循环就知道了)
ImoocJava a=new ImoocJava();然后调用你的方法
Java入门第一季(IDEA工具)升级版
1165537 学习 · 17586 问题
相似问题