自己实在找不出来错。
2014-09-09
4 回答
//定义方法完成成绩排序并输出前三名的功能
public void getArray(int[] scores){
Arrays.sort(scores);
int a=0;//用来记录已经输出了多少个
for(int i=scores.length-1;i>=0;i--){
if(scores[i]>100||scores[i]<0){
//i++;
continue;
}
//这里最好用println,不要用print,这些数挤在一行你都分不出来了。
System.out.println(scores[i]);
a++;//在每次输出后都加1
//if(i>scores.length-4){
// break;
//}
//直到输出3个就可以退出了
if(a==3)
break;
}
}
你的错误有3点:
1、第15行,你对for循环的理解有问题。
for(表达式1;表达式2,表达式3)
{
语句.....
}
这里表达式2,是用来控制循环满足条件时执行,你理解成满足条件时退出循环,所以你的表达式写成了i<0,应该是i>=0。
2、第17行,i这个变量是用来控制数组的遍历的,你在循环里面最好不要再操作它了,for的表达式3不是已经在每次循环完都减1了么。这行应该去掉,我猜你可能是想记录数组里有多少个数没有打印输出,但你也应该换一个变量啊,别再用i了。而且题目是要输出3个,你记没输出多少个有什么用。你应该记录已经输出了多少个,然后再输出到3个的时候退出。
3、第21~23行,
if(i>scores.length-4){
break;
}
这里控制只输出3个,你这里用到scores.length-4,应该是想在i遍历scores倒数第4个的时候退出,但是你这是假定你已经知道了数组有1个大于100,然后是3个你要输出的最大值,可是你写这个方法的时候并不知道传给你的数组是什么。而且即便这样你也应该写i<scores.length-3。
改了下代码,请参考加粗斜体注释...
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.getArray(scores);
}
//定义方法完成成绩排序并输出前三名的功能
public void getArray(int[] scores){
Arrays.sort(scores);
int printCount = 0;
System.out.println("考试成绩的前三名为:");
//for(int i=scores.length-1;i<0;i--){ i 是从 length-1 开始赋值,初始值为 6,若使用 i < 0为判断条件, 永远不执行for循环...
for(int i=scores.length-1;i > 0;i--){
if(scores[i]>100||scores[i]<0){
//i++; 第一次循环到这的时候 i == 7,然后 i--,i == 6...成死循环了;
continue;
}
System.out.println(scores[i]);
printCount++;
//if(i>scores.length-4){ 这里的 i 是从 length-1 开始赋值的,第一个符合条件的 i 值为 5,5 > (7-4),直接break;
if(printCount == 3){
break;
}
}
}
}
举报