java do while loop 在满足条件后一直循环

标签 java loops do-while

我是一名新的 Java 程序员,我正在编写一个程序,为 3 台打印机设置 3 个型号。如果用户输入错误的值,我希望它继续向用户询问型号。我让它工作,但前提是用户的第一个值是 3 台打印机之一的编号。如果第一个值不是可能的值之一,而第二个输入是它仍然继续重复循环。

package printing;

import java.util.Scanner;

public class newClass {

    public static void main(String[] args) {

        int count = 0;

        String machine1 = "546";
        String machine2 = "892";
        String machine3 = "127";


        Scanner s = new Scanner(System.in);

        System.out.print("Model Number:");
        String modelNumber = s.nextLine();
        // increment count if first input value is wrong
        if (!s.equals(machine1) || !s.equals(machine2) || !s.equals(machine3))
            count++;

        // if user inputs right value
        while (true) {
            if (modelNumber.equals(machine1)) {
                System.out.println("Machine 1 is online");
                break;
            }
            if (modelNumber.equals(machine2)) {
                System.out.println("Machine 2 is online");  
                break;
            }
            if (modelNumber.equals(machine3)) {
                System.out.println("Machine 3 is online");
                break;
            }

            // keep looping if user does not input values for machine1, machine2 or machine3
            do {
                System.out.println("Try again");
                System.out.print("Model Number:");
                String modelNumberFalse = s.nextLine();
                /* each time user gets value wrong the count variable goes up by 1 and
                   the loop breaks when count reaches 3 */
                count++;
                if (count == 3)
                    break;
            } while (!s.equals(machine1) || (!s.equals(machine2)) || (!s.equals(machine3)) && (count < 2));

        }
    }
}

此外,每次用户输入错误的值时,我都希望 count 变量递增,直到它达到 3 并且 do while 循环中断,但在我输入错误值超过 3 次后它会继续询问型号。

最佳答案

有几个问题。这行是错误的:

while(!s.equals(machine1) || (!s.equals(machine2)) || (!s.equals(machine3)) && (count < 2));

s 是扫描仪,不是字符串,这不是有效的比较。将 modelNumber 替换为 s 得到:

while(!modelNumber.equals(machine1) || (!modelNumber.equals(machine2)) || (!modelNumber.equals(machine3)) && (count < 2));

这不能为假,除非 modelNumber、machine1、machine2 和 machine3 都是相同的值。

同时测试 count 会把事情搞砸,而且是多余的,因为您正在测试它并在循环中中断。

应该是

while(!modelNumber.equals(machine1) 
    && (!modelNumber.equals(machine2)) 
    && (!modelNumber.equals(machine3)));

参见 DeMorgan's Laws .应用此规则给出

while(!(modelNumber.equals(machine1)
    || modelNumber.equals(machine2)
    || modelNumber.equals(machine3)))

这可能更容易阅读。

另外,如果您用“return”代替“break”;随着对 do-while 条件的更改,它起作用了。所以还有其他事情正在发生。在内部 do-while 中调用 break 会使控制返回到外部 while 循环的顶部。添加一个在中断之前设置并在外部 while 循环中测试的 boolean 标志将是解决此问题的一种方法。或者只使用返回。

关于java do while loop 在满足条件后一直循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548877/

相关文章:

java - 嵌套在 do-while 循环中的 try-catch 没有实际循环是否有原因?

java - 命名 boolean 值在 while 语句中不起作用

java - 下载并保存文件

继承

c++ - while 循环没有正确终止

java - 如何将 temp 中的字符串分配给 returnString?

java - 获取学生评分测试成绩的平均值

c - 虽然循环不重复?

java - 如何使用 JUnit 5 模拟 Spring 依赖关系?

Java数表奇怪的错误