如何在Java中循环while循环

时间:2014-09-13 16:40:50

标签: java loops

我正在使用JAVA进行编码,我正试图找出如何使用一种简单的方法来结束循环,我试图将其用于高级代码。为了测试它是否有效,我制作了这段代码:

package files;

public class EndLoopWithBooleanMethod {
    static boolean a = true;
    public static void main(String[] args){

        while(a = true){
            EndLoop(a);
            System.out.print(".");
            EndLoop(a);
        }
    }

    public static boolean EndLoop(boolean b){
        return false;
    }

}

当我创建它时,它将继续打印。即使它应该返回false并结束循环,我已经尝试更改

static boolean a = true;

static boolean a;

但没有区别。

我知道您可以使用break结束循环;但我没有尝试过,因为我可以使用方法在不同的上下文中有效地结束循环。请通过显示原始代码行来纠正我,然后向我展示固定代码,这有助于我理解更多(也可以解释)。

编辑:解答,大多数人都有同样/正确的答案:不需要更多的答案!

7 个答案:

答案 0 :(得分:1)

将方法的返回值分配给boolean a

试试这个:

while(a == true){
        a=EndLoop(a);
        System.out.print(".");
       a= EndLoop(a);
    }
即使您返回false,

a=true也会将a的值赋值为true。而是使用a==true

答案 1 :(得分:1)

第一个问题:while(a = true)总是如此。您需要使用比较:while(a == true)并且因为a是一个布尔值,您可以将其写为:

while(a)

第二个问题:EndLoop没有做任何事情。该参数似乎没用,因为Java没有通过引用传递。除非您对值执行某些操作,否则返回值将无用。我的猜测是你想要这样的东西:

public static void endLoop(){
    a = false;
}

答案 2 :(得分:0)

您的问题是while(a = true)不是比较运算符。您需要将其更改为while(a == true)

a = true设置a等于true。你真正的意思是"如果(a等于真)"这是a == true。 (因为这是布尔值,你可以将它浓缩为while(a)

所以对你:

while(a){
        EndLoop(a);
        System.out.print(".");
        EndLoop(a);
    }

答案 3 :(得分:0)

试试这个:

package files;

public class EndLoopWithBooleanMethod {
    static boolean[] a = new boolean[1];
    public static void main(String[] args){

        while(a[0] == false){
            EndLoop(a);
            System.out.print(".");
            EndLoop(a);
        }
    }

    public static void EndLoop(boolean[] b){
        b[0] = true;
    }
}

问题是参数是按值传递的,所以如果你想改变它们你可以做上面的技巧 - 通过将它们放在一个数组中创建对它们的引用,那么数组引用本身不会改变,只是它包含的值。

答案 4 :(得分:0)

你正在混淆一些事情:

  • 您不会检查a是否为true,而是设置它。使用单个等号(=)为变量赋值,使用double等于运算符(==)进行比较。

    while (a = true)必须为while (a == true)while (a)

  • 在方法EndLoop(boolean a)中,您需要参考一个参数,但您不能对参数执行任何操作。您刚刚返回false,未使用a参数。

    你应该写这样的东西:

    static boolean a = true;
    
    public static void main(String[] args) {
        while (a == true) { // Or "while (a)", which is the same
            System.out.print(".");
            a = endLoop();
            // a will be false
            // and there will be no next iteration of the while loop,
            // because a is not true anymore
        }
    }
    
    public static boolean endLoop(/* We don't need arguments here */) {
        return false;
    }
    

我还可以提出一些建议:

  • 您应该使用小写字母开始方法名称,请参阅Java命名约定。
  • 调用只返回endLoop()的方法false是没用的,您应该在break循环中使用while。如果您想通过一些变量检查扩展endLoop()方法,则应重命名endLoop

答案 5 :(得分:0)

while循环与Java中的任何其他条件循环一样接受boolean值作为条件,因此您只需传入a布尔基元:

while(a){
    EndLoop(a); //This will reassign the a primitive with a false literal
    System.out.print(".");
}

你实际在做什么,是将true字面值重新放到a变量上,然后检查它,所以很明显它永远都是真的,你最终会得到一个无限循环。

要检查的第二种情况,是你的EndLoop方法(注意方法命名,第一个字母应该是小写),应该通过参数更新其值来更新:

public static boolean endLoop(boolean b){
    b = false; //It will update the a value when it is passed as an argument
}

或者只是不传递任何参数并更改a字面值,因为它是一个类实例:

public static boolean endLoop(){
    a = false;
}

答案 6 :(得分:0)

您不会将a的值(默认情况下为true)更改为false,您只需调用一个返回false的方法,但不会将此值设置为此返回值。

将您的代码更改为:

package files;

public class EndLoopWithBooleanMethod {
static boolean a = true;
public static void main(String[] args){

    while(a) {    //This is enough as a is a boolean, the complete thing would be
                  //whlie (a == true)
        EndLoop(a);
        System.out.print(".");
        EndLoop(a);
    }
}

public static void EndLoop(boolean var){
    var = false;  //a is set to false instead of the method returning false
}
}