public void sort(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]);
}
}
与
public void sort(int[] scores){
Arrays.sort(scores) ;
for(int i=scores.length-1;i>=0;i--){
if(scores[i]<0||scores[i]>100){
continue;
}
int num=0
num++;
if(num>3){
break;
}
System.out.println(scores[i]);
}
}
这两个代码我只是把int num=0放的位置不同,怎么输出的不一样啊,前者有3个数,后者有5个数
只出5个数是因为数组里的符合条件的都已经遍历完了。其他如上。
简单来说,
第一种num是在循环语句for之外定义,你循环一次,它自增一次,根据条件限制,最多它不能超过3
第二种num你把它定义在循环语句for内,那么你循环一次,它自增后又被你定义为0了,无限num=0......
第一种写法是对的,求出最后三位.
第二种有两个问题:
1.第二种代码,你的int num=0后面没加分号.
2.先看for语句 (事实上这三个肯定是正数)
第一次循环:最后一位元素---大于0---执行判断if条件---(不满足)即在0到100范围内---跳出if---定义num=0且自增(此时num=1)---再判断if(num大于3吗?)(不满足)跳出---输出scores[scores.length-1](即倒数第一个元素,最大值)-->然后执行i--
第二次循环(问题在这里):,现在开始第二次循环---倒数第二个元素---大于0---执行判断if条件---(不满足)即在0到100范围内---跳出if---《定义num=0......》《之前第一次循环后num已经自增为1,这里又重新定义为0是干嘛的?只出5个数,没有无限循环已经很幸运了~~》
最后两行才是你的症结所在.