0

C に似た構文を使用して表現するループ ステートメントがあります (C、C++、Java、JavaScript、PHP などはすべて同様の構文を使用します)。

while (c != 'o' || c != 'x') {
    c = getANewValue();
}

またはを取得するまで実行したいのですが、または'o''x'あっても終了しません。なぜだめですか?c'o''x'

私も使ってみましたif

if (c != 'o' || c != 'x') {
    // Show an error saying it must be either 'o' or 'x'
}

cただし、が'o'またはの場合でも、常にエラーメッセージが表示されます'x'。なんで?

4

5 に答える 5

11

条件(c != 'o' || c != 'x')が false になることはありません。の場合cはtrue になり、OR 条件が満たされます。の場合はtrue になり、OR 条件が満たされます。'o'c != 'x'c'x'c != 'o'

(OR)&&ではなく (AND)が必要です。||

while (c != 'o' && c != 'x') {
    // ...
}

"While cis NOT 'o'AND cis NOT `'x'..." (たとえば、どちらでもありません)。

または、ここで説明するド・モルガンの法則を使用します。

while (!(c == 'o' || c == 'x')) {
    // ...
}

c「(である'o'、またはcである)というのは真実ではありませんが'x'...」

于 2016-09-12T10:05:12.753 に答える
3

if(c!='o' && c!='x')の代わりにする必要がありますif(c!='o' || c!='x')。演算子を使用するorと、ブール式は常に true になります。

于 2016-04-13T17:28:06.687 に答える
2

c != 'o' || c != 'x'条件が常に trueになるのはなぜですか?

ORこの式は、論理演算子 ( )を使用して 2 つのサブ式を結合し||ます。trueサブ式の少なくとも 1 つが である場合、式はですtrue。であるためにはfalse、それが接続する両方のサブ式が である必要がありますfalse

サブ式はc != 'o'andc != 'x'です。

最初のサブ式c != 'o'falsewhenc == 'o'です。2 つ目も同じです。それはfalseいつですかc == 'x'

同時にはできないため、false同時にはできませんのでご注意ください。c'o''x'

于 2016-09-12T10:24:35.037 に答える
0

条件は、if(!(c=='o' || c=='x'))またはif(c!='o' && c!='x')

于 2016-04-13T17:40:14.317 に答える
0

x を入力したり、o を入力した場合でも、条件が true と評価され、game_start が false のままである場合。

if(c!='o' && c!='x') もっと簡単な方法を使用するか、使用する必要があります

if(c == 'o' || c == 'x')
   game_start=true;
else
    System.out.println("you can only enter o or x!");
于 2016-04-13T17:42:38.243 に答える