我的 do while 循环在一次迭代后停止。我该如何继续下去?

Posted

技术标签:

【中文标题】我的 do while 循环在一次迭代后停止。我该如何继续下去?【英文标题】:My do while loop is stopping after one iteration. how do I keep it going? 【发布时间】: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。 【参考方案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);

【讨论】:

以上是关于我的 do while 循环在一次迭代后停止。我该如何继续下去?的主要内容,如果未能解决你的问题,请参考以下文章

labview停止循环为啥波形会清除一次

Python for 循环在第一次迭代后停止

Python入门教程第57篇 循环进阶之模拟do…while语句

VBA for Access - Do While 循环停止递减

do-while循环结构

do-while循环结构