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,为什么也能通过编译,求解?
原理来说==为比较运算符,=为赋值运算符不能通过编译的。

解决方案 »

  1.   

    if(arr[index] = true){
    }相当于先赋值再判断
    arr[index] = true;
    boolean flag = true;
    if (flag) {
    }为永真,相反
    if(arr[index] = false){
    }
    为永假,所以为了避免误写成=号,一般这么写:
    if(true == arr[index]){
    }
    这样就不能写一个=号了
      

  2.   

    如果将arr[index] == true改为arr[index] = true,那么编译后的结果arr[1],arr[4]的结果都为false,为什么会造成这个结果,根据代码来,有点解释不通。
      

  3.   

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