public static void main(String[] args) {
int[] scores={89,-23,64,91,119,52,73};
HelloWorld hello = new HelloWorld();
hello.youxiao(scores);
hello.chengji(scores);
}
public void youxiao(int scores[]){
int i=0;
for(int score:scores)
{
if(score<100&&score>0)
{
scores[i]=score;
i+=1;
}
}
}
public void chengji(int scores[]){
Arrays.sort(scores);
for(int i=scores.length-3;i<scores.length;i++){
System.out.println(scores[i]);
}
}
输出了什么东西
你在main中hello.youxiao(scores);后添加一句System.out.println(Arrays.toString(scores));会发现scores数组已经变成 [89, 64, 91, 52, 73, 52, 73];然后你再执行 hello.chengji(scores)后又会排序,scores数组变成了,[52, 52, 64, 73, 73, 89, 91];所以你最后输出的73,89,91。
你可以将youxiao中的改成,如下,将不符合的数据改成-1,这样排序的时候不会影响正常数值的排序(因为排序是升序,-1都会在数组最前面),而且也不会改变数组的长度,所以你最后可以从数组的最后三个取到正确的值(这样你就不用判断数组的有效值究竟是第几位到第几位,只需从最后三个提取数值就ok)。
for(int score:scores){ if(score>100||score<0) scores[i]=-1; i++; //注意i++在if外面 }
这是按照你的思路改的,但是实际上没有必要写这么麻烦的。。。你可以再自己考虑更好的思路
i<scores.length;
而且这句不对,i=4了,i又小于数组长度7,i--。这样就是死循环了,因为 i 永远小于7
int temp = 0; int length = scores.length; for(int i = (length-1); i>=0 && temp<3; i--) { if(scores[i]<0 || scores[i]>100) continue; temp++; S ystem.out.println(scores[i]); }
for(int i=scores.length-3;i<scores.length;i++)。这句,数组长度是7,7-3=4。下表从4开始,i--,依次往下输出,输出的元素是下表为[4][3][2][1][0]里的元素了,当然不对了。你看看:
int temp = 0;
for(int i = (length-1); i>=0 && temp<3; i--) {
if(scores[i]<0 || scores[i]>100)
continue;
temp++;
System.out.println(scores[i]);
}
if(score<100&&score>0)这里不可以是或 要两者同时满足