2014-09-13 176 views
-6

我在JAVA中编写代码,我试图弄清楚如何结束while循环和我正在尝试用于高级代码的简单方法。为了测试它是否正常工作,我做了这个代码:如何在Java中结束while循环

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

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

+2

你觉得什么'return'声明呢? '='和'=='有什么区别? – 2014-09-13 16:44:16

回答

0

你不改变的值(默认情况下为真)以虚假的,你只需要调用一个方法将返回false但n没有设置为这个返回值。

你的代码改成这样:

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 
} 
} 
+0

这也有助于我的问题以完整的代码方式,谢谢! – jiggumbob 2014-09-14 04:33:26

0

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

a = true集合a等于true。你真正的意思是“if(a is equal to true)”,它是a == true。 (由于这是布尔,你可以浓缩成while(a)

所以你:方法

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

分配返回值boolean a

试试这个:

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

a=true会将a的值赋给真,即使您返回false也是如此。而是使用a==true

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; 
    } 
} 

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

1

第一期:while(a = true)总是如此。您需要使用比较:while(a == true)因为a是一个布尔值,你会写一样:

while(a) 

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

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

谢谢,这应该解决问题。 – jiggumbob 2014-09-14 04:31:06

0

你混淆了一些事情:

  • 你不检查,如果atrue,但设置它。使用单个等号(=)将值赋值给变量,并使用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是没用的,你应该在while循环中用break。如果要通过一些变量检查来扩展endLoop()方法,则应该重命名为endLoop
0

while循环在Java的任何其他条件循环接受boolean值作为条件,所以你可以通过简单的a基本布尔:

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

,你实际上是在做什么,是reassinging将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; 
}