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.scoresSort(scores,scores.length);
}
//定义方法完成成绩排序并输出前三名的功能
public void scoresSort(int[] scores,int num){
int[] scoresCorrect=new int[num];
Arrays.sort(scores);
for(int i=scores.length-1,j=0;i>=0;j++){
if(scores[i]<0 && scores[i]>100){
i--;
continue;
}else{
scoresCorrect[j]=scores[i];
i--;
}
}
System.out.println("考试成绩的前三名为:");
for(int i=scoresCorrect.length-1;i>=scoresCorrect.length-3;i--){
System.out.println(scoresCorrect[i]);
}
}
这是我的错误的运行结果
这是正确的结果
别说,你这bug挺多的。
1)score<0||score>100,是或不是且
2)for循环里第三项j++删掉,把j++加进else里;或者把j++改成i--,把句里的if和else里的i--全删掉,再把j++加进else
3)你是先把原数组从小到大排序之后,再从尾到头有选择的放进correct数组里,所以correct数组本就已经是从大到小的顺序,你输出的时候应该从前向后输出,不是从后向前输出。
发一个给你debug之后的版本:
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.scoresSort(scores,scores.length);
}
//定义方法完成成绩排序并输出前三名的功能
public void scoresSort(int[] scores,int num){
int[] scoresCorrect=new int[num];
Arrays.sort(scores);
for(int i=scores.length-1,j=0;i>=0;){
if(scores[i]<0 || scores[i]>100){
i--;
continue;
}else{
scoresCorrect[j]=scores[i];
i--;
j++;
}
}
System.out.println("考试成绩的前三名为:");
for(int i=0;i<3;i++){
System.out.println(scoresCorrect[i]);
}
}
}
另外你写这个好麻烦啊,直接输出就行没必要再列到数组输出;数组长度本就可以.length得到没必要再设一个参数;此外排序之后后面的数只可能大于100不可能小于零,不用判断是否小于零;最后,你只需要前三个,没必要把所有有效数字都排一遍。
我发一下我写的吧。
public void prints(int[] score){
Arrays.sort(score);
System.out.println("考试成绩的前三名为:");
int i=score.length-1;
for(int j=1;j<=3;i--){
if(score[i]>100)
continue;
else
{System.out.println(score[i]);j++;}
}
public static void main(String[] args) {
int[] scores={89,-23,64,91,119,52,73};
HelloWorld hello=new HelloWorld();
hello.scoresSort(scores,scores.length-2);
}
//定义方法完成成绩排序并输出前三名的功能
public void scoresSort(int[] scores,int num){
int[] scoresCorrect=new int[num];
Arrays.sort(scores);
int i=0,j=0;
for(i=0;i<scores.length;i++){
if(scores[i]>0 && scores[i]<100){
scoresCorrect[j] = scores[i];
j++;
}
} System.out.println("输出前三名成绩:");
for(j=scoresCorrect.length-1;j>=scoresCorrect.length-3;j--){
System.out.println(scoresCorrect[j]);
}
}
public static void main(String[] args) {
int[] scores={89,-23,64,91,119,52,73};
HelloWorld hello=new HelloWorld();
hello.scoresSort(scores,scores.length-2);
}
//定义方法完成成绩排序并输出前三名的功能
public void scoresSort(int[] scores,int num){
int[] scoresCorrect=new int[num];
Arrays.sort(scores);
int i=0,j=0;
while(i<scores.length){
if(scores[i]>0 && scores[i]<100){
scoresCorrect[j] = scores[i];
j++;
i++;
}else{
i++;
}
} System.out.println("输出前三名成绩:");
for(j=scoresCorrect.length-1;j>=scoresCorrect.length-3;j--){
System.out.println(scoresCorrect[j]);
}
}