2016-04-13 51 views
1

Ben C benzeri bir sözdizimi (C, C++, Java, JavaScript, PHP, vb tüm benzer bir sözdizimi kullanın) kullanarak ifade edeceğiz bu döngü deyimi, var Bir 'o' veya 'x' olsun, ancak c'o' veya 'x' olduğunda bile hiç çıkmaz. Neden olmasın?Neden benim c! = 'O' || c! = 'x' koşulu her zaman doğru mu?</p> <pre><code>while (c != 'o' || c != 'x') { c = getANewValue(); } </code></pre> <p>Ben kadar çalıştırmak istiyorum:

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

ama c'o' veya 'x' olduğunda bile bu da her zaman hata mesajı gösterir:

Ben de if kullanarak denedim. Niye ya?

+1

Muhtemel yinelenen [Bir deyimdeki [Değerlerin agnostik - birçok değerin (değişken) negatiflenmesi] (http://stackoverflow.com/questions/26337003/language-agnostic-ne-many-values-variables-in- tek tablosu) – Pshemo

cevap

3

if(c!='o' || c!='x') yerine if(c!='o' && c!='x') olmalıdır. or işlecini kullanırsanız, boole ifadesi her zaman doğru olur.

0

şartı olmalıdır if(!(c=='o' || c=='x')) veya

0

if(c!='o' && c!='x') bile x girebilir veya koşulu true ve dolayısıyla game_start yanlış kalırsa bu durumda o girdiğinizde.

o if(c!='o' && c!='x') olmak veya yanlış olamaz bir daha yalındır yol

if(c == 'o' || c == 'x') 
    game_start=true; 
else 
    System.out.println("you can only enter o or x!"); 
9

koşul (c != 'o' || c != 'x') kullanmalıdır. c, 'o' ise, c != 'x' doğru olur ve OR koşulu karşılanır. c, 'x' ise, c != 'o' doğru olur ve OR koşulu karşılanır.

Sen && istiyorum (AND), değil || (OR): "c'o' VE c DEĞİL iken` 'x' ... DEĞİLDİR"

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

(örn, bu ikisi de var) .

Veya De Morgan yasasını covered here kullanın:

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

"o (c'o' veya c'x' olduğu) olduğu doğru değil olsa ..."

1

Neden hep benim c != 'o' || c != 'x' durumdur doğru?

ifade mantıksal OR operatörü (||) kullanılarak iki alt ifadeler birleştirir. Alt ifadelerin en az biri true ise, ifade true olur. false olmak için, bağlanan alt ifadelerin her ikisi de false olmalıdır.

Alt ifadeler c != 'o' ve c != 'x''dur. c == 'o' ilk alt ifadesi c != 'o'false olduğunda. İkincisi için aynı; c == 'x' olduğunda false.

c aynı zamanında 'o' ve 'x' olamaz çünkü aynı zamanında false olamaz unutmayın.