2015-08-09 180 views
1

我寫了一個程序在Java中比較兩個變量值,X和Y. 當我輸入相同的數字爲X和Y在循環的第一次嘗試它說匹配和終止。但是如果它在第一個循環中返回「false」,然後在下一個返回「true」,它不會終止並繼續,就好像「b」具有「false」值一樣。雖然循環不退出

import java.util.Scanner; 
public class clads { 

    //Variables 
    public static int y; 
    public static int x; 
    static boolean b = mymethod() ; 


    //MainProcess 
    public static boolean mymethod() { 
     Scanner myscanner = new Scanner(System.in); 
     System.out.println("put a number for X"); 
     x = myscanner.nextInt(); 
     System.out.print("put a number for Y"); 
     y = myscanner.nextInt(); 
     if (y==x){ 
      System.out.println("match"); 
      return true; 
     }else{ 
      System.out.println("Mismatch, Redo"); 
      return false; 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     while(b ==false){ 
      mymethod(); 
     } 
    } 
} 

但是當我添加一個「Break」時只要它返回一個「真」值,關鍵字就會終止。請給我一些解釋。

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    while(b ==false){ 
     mymethod(); 
     Break; 
    } 

回答

3

當通過調用初始化mymethodb,它設置爲truefalse永遠。如果這是真的,你不執行。如果它是假的,你的循環將永久執行。

0

您可以修改代碼如下

public static void main(String[] args) { 
// TODO Auto-generated method stub 
while(b ==false){ 
    if (mymethod()) { 
     break; 
    } 
} 

如下如果函數mymethod()返回true,則while循環將終止,但是當函數返回false,while將繼續。

+0

那工作謝謝你。我也發現了另一種使它工作的方法: \t do { \t mymethod(); (b); \t} } 但我尋求解釋它保持循環的原因! –

+0

不在main()或mymethod()中設置b的值。 –

2

你的錯誤是在聲明b時設置b的值。你實際上根本不需要b。只要把的MyMethod的調用()while條件裏:

import java.util.Scanner; 
public class clads { 

    //Variables 
    public static int y; 
    public static int x; 

    //MainProcess 
    public static boolean mymethod() { 
     Scanner myscanner = new Scanner(System.in); 
     System.out.println("put a number for X"); 
     x = myscanner.nextInt(); 
     System.out.print("put a number for Y"); 
     y = myscanner.nextInt(); 
     if (y==x){ 
      System.out.println("match"); 
      return true; 
     }else{ 
      System.out.println("Mismatch, Redo"); 
      return false; 
     } 
    } 

    public static void main(String[] args) { 
     while(!mymethod()); 
    } 
} 

你每次的調用的時間來檢查從的MyMethod的返回值()。你的原始代碼只是捕獲了第一個值,並且永久使用它。

+1

謝謝你的工作! –

+0

我很高興它爲你工作。如果這是一個很好的答案,也許你會考慮「接受」它? –

1

因爲你的變量初始化一次,然後永遠不會得到更新。嘗試:

public static void main(String[] args) { 

    while(!b){ 
     b = mymethod(); 
    } 
} 
+0

謝謝你的工作。我試圖把'mymethod(); b = mymethode();' ,但是它在返回錯誤值之後使循環再轉一圈。它只是對我來說,只是把** b = mymethod(); **將保證該方法被調用,而不需要** b = mymethode(); **就像在Visual Basic中一樣。我只需要習慣java。 –