繁体   English   中英

While循环不会退出

[英]While loop doesn't quit

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

通过调用mymethod初始化b ,它将永远设置为truefalse 如果是真的,则不会执行。 如果为假,则循环将永远执行。

您的错误是在声明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()时检查返回值。 您的原始代码只是捕获了第一个值并一直使用。

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

public static void main(String[] args) {

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

您可以如下修改代码

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM