循环时不遵守退出条件

时间:2019-10-10 20:28:20

标签: java while-loop

我需要编写代码来找到最小整数,其剩余为:

•1除以3

•2除以5

•3除以7

我尝试了以下代码,但我的输出为1。我尝试更改初始值,但仍会输出初始值。

public static void main (String[] args)
{
    int i=2;

    while((i%3)!=1 && (i%5)!=2 && (i%7)!=3) {
        i++;
    }

    System.out.print(i);
}

2 个答案:

答案 0 :(得分:0)

您在while循环中的条件不正确,应该是:

while((i%3)!=1 || (i%5)!=2 || (i%7)!=3)

为什么?

您需要找到第一个适用的数字:

a%3 == 1 and a%5 == 2 and a%7 == 3

为此,您需要跳过以下所有数字:

not(a%3 == 1 and a%5 == 2 and a%7 == 3)

如果您申请De Morgan's laws,则会得到:

a%3 != 1 or a%5 != 2 or a%7 != 3

答案 1 :(得分:0)

while循环中的逻辑不正确,并且由于其编写方式而很难看到问题。除了解决该问题并试图说服您正确之外,这里还采用了另一种方法,将其分解为不同的部分,因此应该更容易进行推理。它的作用是使循环稍微翻转一下:永远运行直到满足特定条件为止。

func

当我在本地运行上述代码时,它会打印出int i = 2; while (true) { boolean correctRemainderFor3 = (i % 3 == 1); boolean correctRemainderFor5 = (i % 5 == 2); boolean correctRemainderFor7 = (i % 7 == 3); if (correctRemainderFor3 && correctRemainderFor5 && correctRemainderFor7) { break; } else { i++; } } System.out.print(i);