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.cj(scores);
int[] a= hello.cj(scores);
System.out.println(a);
}
//定义方法完成成绩排序并输出前三名的功能
public int[] cj(int[] scores){
Arrays.sort(scores);
int num=0;
for(int i=scores.length-1;i>=0;i--){
if(scores[i]<0||scores[i]>100){
continue;
}
num++;
if(num>2){
break;
}
System.out.println(scores[i]);
}return scores;
}
}
a是int[],你直接输出,当然是打印地址,
因为你想输出的是数组,所以打印成这样.数组输出需要转换一下:Arrays.toString(a),你改一下就好了。 System.out.println(Arrays.toString(a));
错误1:num++; if(num>2){ break;} 假如在上一轮num=2,意味着已经有两个有效成绩。在这一轮中,假如有效,你首先就加了个1,就变成3,进入if,直接break退出了,根本不会输出这第三个有效成绩。正确的顺序应该是先加一,再输出,再判断。
错误2:return scores; int[] a= hello.cj(scores); System.out.println(a); 这个我也说不太清楚,但是我觉得应该是不能这样子的吧,不说语法,从逻辑来看,scores只是升序排序之后的数组,你再输出来和题目不符,题目是前三高。我觉得cj方法可以不用返回直接用void,在cj方法里面输出,当你判断数组里这个数满足要求你就可以输出它,增一条语句比你这个要稍微简单点:System.out.prinln(scores[i]); main方法里呢只要调用cj方法就好,hello.cj(scores);
你的代码里
int[] a= hello.cj(scores);
System.out.println(a);
这里没必要,不需要写,直接删了
if(num>2)这里只会输出俩个数字,应该改成if(num>3)
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.cj(scores);
}
//定义方法完成成绩排序并输出前三名的功能
public int[] cj(int[] scores){
Arrays.sort(scores);
int num=0;
for(int i=scores.length-1;i>=0;i--){
if(scores[i]<0 || scores[i]>100){
continue;
}
num++;
if(num>3){
break;
}
System.out.println(scores[i]);
}
return scores;
}
}
试试这样
不需要返回值