2016-09-19 54 views
-4

为什么下面产生一个无限循环?Java ||而无限循环语句

int sum = 0;  
    int k = 1; 
    while (sum < 12 || k < 4) 
    sum += k; 

    System.out.println(sum); 

我将承担输出将是12,一旦总和达到12:当k保持为1。

+0

缩进问题.... – Rishi

+7

'k'仍然小于4,因此条件保持为真。 – resueman

+1

增量k值 – Rishi

回答

1

应该使用而(总和 &ķ< 4),否则ķ< 4将永远是真实的,循环将继续运行。

如果使用OR,当其中一个条件为真时,循环继续。条件是循环继续,而不是停止。

false || true == true 
true || true == true 
false || false == false 

false && true == false 
true && true == true 
false && false == false 

所得真或假确定该循环继续

+0

但是,因为它是一个OR语句,是不是会检查sum <12或k <4? –

+0

这是一个多项选择问题 –

+0

@Kyle McAllister,如果你使用OR,当这些条件之一成立时,循环继续。条件是循环继续,而不是停止。 false || true == true –

1

k不递增。

int sum = 0; 
int k = 1; 

while (sum < 12 || k < 4) { 
    sum += k; 
    k++; 
} 

System.out.println(sum); 
+0

为什么这将是必要的,当sum <12或k <4时,循环会不会中断?再加上这会产生不同的总和? –

+0

@KyleMcAllister循环如果满足一些条件则继续 – amchacon

0

您的k值在所有迭代中保持不变。

您的环路条件是sum<12k<4。既然你没有改变迭代中的k值,它总是小于4,并且循环不断进行。

1

在您的代码k不增加,所以条件保持真实。所以这就是为什么你的循环是无限的。

int sum = 0; // sum is 0 
    int k = 1;  // k is 1 
    while (sum < 12 || k < 4) { 
    sum += k; // sum is incremented by 1 each time it loops 
    } 

System.out.println(sum);

但是这里你的k值仍然小于4.所以它循环无限。

编辑:嗯,我正在做多一点明确

这是你的while循环

while (sum < 12 || k < 4)

这意味着要么sum < 12必须是真或k < 4必须是真实的,对循环while循环。

而这里你的k < 4的条件仍然如此。所以这就是为什么它保持循环无限。

+0

对,这是一个多选题(不是我的代码)。一旦总和达到12,这不足以满足或声明并结束它吗? –

+1

不,它们都应该是真的来终止循环。 – 2016-09-19 17:17:39

+0

明白了,谢谢。我在想完全错误。我认为这会在1或者其他人满意时破裂。实际上,一个或另一个是真的,它会继续,而不是中断。 –

0

您使用||声明。阅读有关“|| & &”||的任何文档。 =>或。 如果声明的左侧为真,并且右侧为false = true(使用||)