读书人

数三退1求解答

发布时间: 2013-06-26 14:29:32 作者: rapoo

数3退1求解答?
public class Sd123 {
public static void main(String[] args) {
boolean[] arr = new boolean[500];
for(int i=0; i<arr.length; i++) {
arr[i] = true;
}

int leftCount = arr.length;
int index = 0;
int countNum = 0;

while(leftCount > 1) {
if(arr[index] == true) { /*改变这句代码*/
countNum ++;
if(countNum == 3) {
countNum = 0;
arr[index] = false;
leftCount --;
}
}

index ++;

if(index == arr.length){
index = 0;
}
}

for(int i=0; i<arr.length; i++) {
if(arr[i] == true) {
System.out.println(i);
}
}
}
}

正确结果为435。
如果将arr[index] == true改为arr[index] = true,为什么也能通过编译,求解?
原理来说==为比较运算符,=为赋值运算符不能通过编译的。

[解决办法]
if(arr[index] = true){
}

相当于先赋值再判断。。。
arr[index] = true;
boolean flag = true;
if (flag) {
}

为永真,相反
if(arr[index] = false){


}
为永假,所以为了避免误写成=号,一般这么写:
if(true == arr[index]){
}
这样就不能写一个=号了。。。
[解决办法]
你的那个变量本来就是个boolean(布尔)型的数据变量,根据Java的运算等级,是先赋值后再判断的.


引用:
if(arr[index] = true){
}

相当于先赋值再判断。。。
arr[index] = true;
boolean flag = true;
if (flag) {
}

为永真,相反
if(arr[index] = false){
}
为永假,所以为了避免误写成=号,一般这么写:
if(true == arr[index]){
}
这样就不能写一个=号了。。。


顶1楼的,你的那个变量本来就是个boolean(布尔)型的数据变量,根据Java的运算等级,是先赋值后再判断的.

读书人网 >J2SE开发

热点推荐