C # -Есть ли способ заставить себя принять операторы OR? - PullRequest
0 голосов
/ 24 января 2011

Я учу себя немного C #, и у меня появилась идея построить калькулятор температуры. Я хочу использовать цикл do-while, чтобы пользователь выбирал правильный выбор меню. То, что я пытался сделать, было:

do
{
  //etc etc etc;
} (while menuChoice != 1||2||3);

Другими словами, продолжайте делать то, что находится внутри цикла, если menuChoice не равен 1, 2 или 3. VS2010 Express говорит мне, что я не могу этого сделать. Есть ли способ сделать это таким образом, или я должен сделать что-то еще? Любые предложения о том, как это сделать, или я должен использовать другое решение?

Ответы [ 5 ]

5 голосов
/ 24 января 2011
do { // stuff
} while (menuChoice != 1 && menuChoice != 2 && menuChoice != 3);
3 голосов
/ 24 января 2011
do {
    // etc.
} while(menuChoice != 1 &&
        menuChoice != 2 &&
        menuChoice != 3
  );

Каждое из предложений конъюнкции должно быть выражением, которое оценивается как bool.Обратите внимание, что != 2 не является выражением, которое оценивается как bool.На самом деле, это даже не юридическое выражение.Вот почему вы должны указать menuChoice != 2.

Также обратите внимание, что вы должны использовать &&, потому что в предложениях.Вы хотите, чтобы menuChoice равнялся 1, или равнялся 2, или равнялся 3. Поэтому вы хотите

!(menuChoice == 1 || menuChoice == 2 || menuChoice == 3)

в качестве условия в цикле while.По законам Деморгана, это эквивалентно

menuChoice != 1 && menuChoice != 2 && menuChoice != 3
1 голос
/ 24 января 2011

РЕДАКТИРОВАТЬ:

Как насчет этого?это позволит вам иметь несмежный набор чисел и будет гораздо более расширяемым, чем миллион ||заявления ...:

int[] menuOptions = { 1, 2, 3 };

...

while(!menuOptions.Contains(menuChoice))
0 голосов
/ 24 января 2011

Просто чтобы предоставить еще одно решение :

using System.Collections.Generic; // for the List<T>
do
{
}
while (!(new List<Int32>(new[]{ 1, 2, 3 })).Contains(menuChoice));

И да, это не лучшее решение, однако, оно является альтернативой (и полезно, если ваш список вариантов увеличивается).

0 голосов
/ 24 января 2011

Или:

do {
    // etc.
} while(menuChoice > 3 || menuChoice < 1);
...