

以前の質問の意図を簡略化するために改めて書いたコードですTimerTaskを使い制御するのでbreakなどの制御文は使えないです。何故Lをfalseにしてるのに終わらないのですか？

[code]

    public class Main  {
    
        public static void main(String[] args)  {
            boolean K = true;
            boolean L = true;
    
            while(and(K,L)){
                System.out.println("test");
                L = false;
            }
        }
    
        public static boolean and(boolean a, boolean b){
            if(a = true){
                if(b = true){
                    return true;
                }
            }
            return false;
        }
    
    }
    
[/code]


CC BY-SA 3.0
2016-03-24T06:53:20.313
23410
2016-05-14T04:53:51.683
2016-03-24T07:25:22.837
14913
14913
question
java
= での比較がうまくいかない


`=`だと代入になります。比較演算子の `==` を使うと動くはずです。

[code]

    if(a == true){
    
[/code]

もしくは、

[code]

    if(a){
    
[/code]

だけでもいいですね。


CC BY-SA 3.0
2016-03-24T07:07:20.997
23411
2016-03-24T07:07:20.997
3054
23410
answer


Javaに限らず、殆どのプログラミング言語での = は代入です。  
あなたのコードは aの値をtrueにしてからaの中身を見てif判定 していることになります。  
（bも同じです）

[code]

    if(a = true){//判定結果は絶対にtrueにしかならない
        // aは絶対true（当たり前）
        if(b = true){//判定結果は絶対にtrueにしかならない
        //bは絶対にtrue（当たり前）
            return true;
        } else {
        //　ここでもbは絶対にtrue
        }
    } else {
    // ここでもaは絶対true
    }
    
    
    
    //正しい例
    if(a == true){
        if(b == true){
            return true;
        }
    }
    
[/code]

要するに、あなたの書いたコードは分解すると下になります

[code]

    a = true;
    if (a == true) {
        b = true;
        if (b == true) {
        }
    }
    
[/code]


CC BY-SA 3.0
2016-03-28T10:56:51.737
23546
2016-03-29T01:45:38.380
2016-03-29T01:45:38.380
10346
10346
23410
answer