2015-08-09 182 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。 –