2013-07-09 4 views
-1

Im новый для C#, и у меня есть небольшая проблема. Я хочу, чтобы простая программа запрашивала у пользователя целое число от 1 до 50, а затем для отображения на консоли, если его нечетное число или нет. Итак, что я пробовал вот так:Новичок C# проблема

Console.WriteLine("Skriv ut ett heltal: "); 
int x = int.Parse(Console.ReadLine()); 

if (x == 1,3,5,7,9,11,13,15,17,19) 
{ 
    Console.WriteLine("The number is odd"); 
} 
else 
{ 
    Console.WriteLine("The number is not odd"); 
} 

Теперь я получаю сообщение об ошибке при условии if. Как я могу это исправить?

+4

Что привело вас поверить, что C# включен этот синтаксис? –

ответ

4
if(x % 2 == 0) 
{ 
// It's even 
} 
else 
{ 
// It's odd 
} 
+2

Полезно показать плакату правильный способ решить эту проблему, вы действительно должны также указать, почему их текущий код дает им ошибку компилятора. В какой-то момент в будущем они обязательно захотят несколько условностей, и это действительно то, о чем они просят здесь – cost

10

C# не позволяют указать несколько значений для проверки переменного с использованием одного if заявления. Вам нужно будет проверить каждое значение (1, 3, 5 и т. Д.) Отдельно, если вы хотите сделать это таким образом, и это будет много избыточного ввода.

В этом конкретном примере, простой способ проверить, если что-то нечетным или четным, чтобы проверить остаток после деления на 2, используя оператор модуля %:

if (x % 2 == 1) 
{ 
    Console.WriteLine("The number is odd"); 
} 
else 
{ 
    Console.WriteLine("The number is even"); 
} 

Однако, если вам действительно нужно чтобы проверить список, тогда простой способ - использовать метод Contains на массиве (на самом деле ICollection<T>). Для того, чтобы сделать его легко и приятно, вы могли бы даже написать функцию расширения, которая позволяет проверить по списку в синтаксически довольно моды:

public static class ExtensionFunctions 
{ 
    public static bool In<T>(this T v, params T[] vals) 
    { 
     return vals.Contains(v); 
    } 
} 

Тогда вы могли бы сказать:

if (x.In(1,3,5,7,9,11,13,15,17,19)) 
{ 
    Console.WriteLine("The number is definitely odd and in range 1..19"); 
} 
else 
{ 
    Console.WriteLine("The number is even, or is not in the range 1..19"); 
} 

вуаля! :)

+0

большое спасибо! – user1892117

+2

Разве это не 'x% 2 == 0'? – Pacane

+0

@Pacane: это зависит от контекста - вы могли бы сказать либо x% 2 == 0, либо даже, либо x% 2 == 1, то это странно. –

1

x == 1,3,5,7,9,11,13,15,17,19 Недопустимый синтаксис для выражения нескольких параметров. Если вы действительно хотите сделать это, то вы можете использовать switch заявление:

switch(x) { 
    case 1: 
    case 3: 
    case 5: 
    case 7: 
    case 9: 
    case 11: 
    case 13: 
    case 15: 
    case 17: 
    case 19: 
      // is odd 
      break; 
    default: 
      // is even 
      break; 
} 

правильно способом было бы использовать оператор по модулю %, чтобы определить, является ли число точно делится на 2 или нет, а не перебор нечетного числа, например, так:

if(x % 2 == 0) { 
    // even number 
} else { 
    // odd number 
} 
0

Попробуйте следующее:

Console.WriteLine("Skriv ut ett heltal: "); 
int x = int.Parse(Console.ReadLine()); 

Console.WriteLine(x % 2 == 1 ? "The number is odd" : "The number is not odd"); 

х% 2 == 1 самку с модулем 2 на входе (снимается как можно больше «2», пока число не станет между 0 и 2, поэтому 0 или 1 в этом случае)

+1

'%' не является факториалом - это модуль –

+0

Да, вы правы. Слишком поздно ожидать, что мой мозг будет функционировать. Спасибо, что заметили мой faux pas –

1

Это недопустимо C#. Вы не можете проверить включение такого набора. В любом случае, нецелесообразно тестировать все цифры в мире.

Почему бы вам просто не сделать это вместо этого;

if (x &1 == 1) // mask the 1 bit 

Побитовые операции довольно быстра, поэтому код должен быть довольно быстрым.

4

Если вы хотите, чтобы проверить, является ли х число в определенном списке:

int[] list = new int[]{ 1,3,5,7,9,11,13,15,17,19}; 
if(list.Contains(x)) 

Распространенный способ проверить, если целое число нечетное, чтобы проверить, если он делится равномерно на 2:

if(x % 2 == 1) 
+2

'x% 2' было бы 0, если бы оно разделилось равномерно. –

+0

@ DanielMann Да ... и 1, если он не делится равномерно, то есть нечетно ... т. Е. что искали ОП. – NominSim

1

Хотя, как указывали другие, это не лучший способ решить эту проблему, причина, по которой вы получаете ошибку в этом случае, состоит в том, что вы не можете иметь несколько значений, подобных этому в выражении if , Вы должны слово это так:

if (x == 1 || x == 3 || x == 5) 

Если вы не знаете, || является символом «или»

1

Ваш если заявление должно быть так, если у вас возникли несколько условий:

если 1 из условий:

if(x == 1 || x == 3 || x == 5) 
{ 
    //it is true 
} 

, если все условия должны быть истинными:

if(x == 1 && y == 3 && z == 5) 
{ 
    //it is true 
} 

Но если вы ищете только четные/четные числа. Используйте оператор %, как говорит другой ответ.

+0

@MichaelBray ohh .. извините, что .. я просто скопировал первый блок-код. Ха-ха. благодаря!! –

0

Один из способов сделать это:

if (x == 1 || 3 || 5){ 
Console.writeLine("oddetall"); 
} 

или так можно создать массив []

int[] odd = new int[3]; // how many odd to be tested 
if(x=odd){ 
Console.WriteLine("Oddetall"); 
} 
+0

Нет. Вы не можете использовать оператор '||' на 'int'. Если вы изменили его на '|', тогда вы выполнили бы * побитовое * или 1, 3 и 5 (то есть 001b | 011b | 101b == 111b == 7). Я думаю, вы имеете в виду 'if (x == 1 || x == 3 || x == 5)', который будет работать так, как вы хотите. –

+0

Аналогично, вы не можете использовать 'if (x = odd)' по трем причинам: ** (1) ** - 'x' является' int', поэтому нельзя напрямую сравнивать с 'int []' (массив) , Вам понадобится что-то вроде 'if (odd.Contains (x))'. ** (2) ** - вам нужно будет использовать оператор '==' для сравнения. Оператор '=' * присваивает * операнд справа операнду слева, что является незаконным здесь, так как справа есть 'int []' и 'int' слева. ** (3) ** - вы на самом деле не * присваивали * ничего для 'odd', поэтому это массив нулей.Вам нужно что-то вроде 'int [] odd = new int [3] {1, 3, 5};' фактически назначить его. –

Смежные вопросы