2014-09-13 171 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; 
}