虽然循环没有退出

时间:2015-08-09 03:47:18

标签: java loops while-loop

我在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;"关键字在返回" true"值。请问我能解释一下。

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

4 个答案:

答案 0 :(得分:3)

通过致电b初始化mymethod时,它会永远设置为truefalse。如果是真的,那么你就不会执行。如果它是假的,你的循环将永远执行。

答案 1 :(得分: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()时都必须检查mymethod()的返回值。您的原始代码刚刚捕获了第一个值并永远使用它。

答案 2 :(得分:1)

因为您的变量初始化一次,然后永远不会更新。尝试:

public static void main(String[] args) {

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

答案 3 :(得分:0)

您可以按照以下方式修改代码

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

如果函数mymethod()返回true,则while循环将终止,但当函数返回false时,while将继续。