【问题标题】:While loop doesn't quit虽然循环不退出
【发布时间】:2015-08-09 03:47:17
【问题描述】:

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

【问题讨论】:

    标签: java loops while-loop


    【解决方案1】:

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

    【讨论】:

      【解决方案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() 时检查它的返回值。您的原始代码刚刚捕获了第一个值并一直使用它。

      【讨论】:

      • 我很高兴它对你有用。如果这是一个好的答案,也许你会考虑“接受”它?
      【解决方案3】:

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

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

      【讨论】:

      • 感谢它也有效。我试着把'mymethod(); b=我的方法();'但它在返回错误值后使循环又进行了一轮。在我看来,仅仅放置 b=mymethod(); 就可以保证调用该方法而无需像在 Visual Basic 中那样 b=mymethode(); .我只需要习惯java。
      【解决方案4】:

      你可以如下修改代码

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

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

      【讨论】:

      • 那工作谢谢。我还找到了另一种让它工作的方法:do{ mymethod(); }而(b); } } 但我寻求解释它保持循环的原因!
      • 不在 main() 或 mymethod() 中设置 b 的值。
      猜你喜欢
      • 2015-08-07
      • 2019-06-28
      • 1970-01-01
      • 2011-12-03
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多