为什么我的程序卡在 do while 循环中?

问题描述

enter image description here

enter image description here

我的程序似乎卡在了 do while 循环中。如果用户输入的数字不是零或一,我希望它重新提示用户

解决方法

如果x == 0怎么办? x != 1 为真,整个条件为真。

如果x == 1怎么办? x != 0 为真,整个条件为真。

如果x == 2怎么办? x != 0 为真,整个条件为真。

所以,无论如何,你的条件都为真,你将继续循环。


您希望以下内容为真:

(x == 0 || x == 1) && (y == 0 || y == 1)

所以你想在它为假时循环。

do { } while (!((x == 0 || x == 1) && (y == 0 || y == 1)));

!(P && Q) 等价于 !P || !Q,并且
!(P || Q) 等价于 !P && !Q

这意味着以下内容与上述内容相同:

do { } while (!(x == 0 || x == 1) || !(y == 0 || y == 1));

do { } while ((x != 0 && x != 1) || (y != 0 && y != 1));