【问题标题】:My do while loop is stopping after one iteration. how do I keep it going?我的 do while 循环在一次迭代后停止。我该如何继续下去?
【发布时间】:2020-04-20 07:08:21
【问题描述】:

我的代码在一次迭代后终止,即使quit 为真。

import java.util.*;
public class calc {
public static  boolean quit;

    public static void main(String[] args) {
    keepGoing();
}
public static void keepGoing() {
    do {

        Scanner s = new Scanner(System.in);
        String input = s.nextLine();
        String inputLower = input.toLowerCase();
        int findQuit = inputLower.indexOf("quit");
        if (findQuit != -1) {
            boolean quit = false;
        }

    } while (quit == true); {
    System.out.println("OTHER CODE GOES IN PLACE OF THIS PRINTLN");
    }
    }
}

【问题讨论】:

  • 如果您没有为静态quit 指定值,它将为假(请参阅this)。然后它永远不会在您的代码中更新为 true。

标签: java loops


【解决方案1】:

您必须将 quit 变量定义为 true。因为布尔变量的默认值为 false。

public static boolean quit = true;

您需要更改此代码:

if (findQuit != -1) {
      boolean quit = false;
}

收件人:

if (findQuit != -1) {
      quit = false;
}

因为不需要再定义相当变量。

无需使用等号来计算布尔值。所以把代码改成:

while (quit == true);
    {
        System.out.println("OTHER CODE GOES IN PLACE OF THIS PRINTLN");
    }

收件人:

while (quit);
    {
        System.out.println("OTHER CODE GOES IN PLACE OF THIS PRINTLN");
    }

完整代码:

import java.util.*;

public class calc {
public static boolean quit = true;

public static void main(String[] args) {
    keepGoing();
}

public static void keepGoing() {
    do {

        Scanner s = new Scanner(System.in);
        String input = s.nextLine();
        String inputLower = input.toLowerCase();
        int findQuit = inputLower.indexOf("quit");
        if (findQuit != -1) {
            quit = false;
        }

    } while (quit);
    {
        System.out.println("OTHER CODE GOES IN PLACE OF THIS PRINTLN");
    }
}
}

【讨论】:

    【解决方案2】:

    你必须先初始化变量quit。 在定义时或之后执行,但必须在 do while 循环开始之前。

    public static boolean quit = true;
    

    【讨论】:

      【解决方案3】:

      boolean 的默认值为false。所以改变

      public static  boolean quit;
      

      public static  boolean quit = true;
      

      另外您目前仅使用 shadowed 变量将其设置为 false。改变

      if (findQuit != -1) {
          boolean quit = false;
      }
      

      if (findQuit != -1) {
          quit = false;
      }
      

      去掉if,直接给boolean点赞

      quit = (findQuit == -1);
      

      最后,无需检查boolean == true。改变

      while (quit == true);
      

      while (quit);
      

      【讨论】:

        最近更新 更多