C#

Можно ли решить задачку используя вместо if else " SWITCH " , и когда лучше что использовать ?

Uint countEvenNumbers = 0; // Чётные числа
uint countOddNumbers = 0; // Нечётные числа

int sumEvenNumbers = 0; // Сумма чётных чисел
int sumOddNumbers = 0; // Сумма нечётных чисел

int Start; Console.WriteLine("Введите начало диапазона: "); Start = int.Parse(Console.ReadLine());
int End; Console.WriteLine("Введите конец диапазона: "); End = int.Parse(Console.ReadLine());

while (Start <= End)
{
if (Start % 2 == 0)
{
countEvenNumbers++;
sumEvenNumbers += Start;

}
else
{
countOddNumbers++;
sumOddNumbers += Start;

}

Start++;
}
Console.WriteLine("Количество чётных чисел = " + countEvenNumbers);
Console.WriteLine("Количество нечётных чисел = " + countOddNumbers);
Console.WriteLine("Сумма чётных чисел = " + sumEvenNumbers);
Console.WriteLine("Сумма нечётных чисел = " + sumOddNumbers);


Console.ReadKey();
Mikom Mikom
Mikom Mikom
85
switch применяют, когда условий как минимум больше двух (иначе смысла не имеет).
switch применяют, когда переменную можно сопоставить с шаблоном, или константой. Если условие требует вычислений, то switch не нужен (не скомпилируется).

Если switch повышает читаемость кода, показывает намерение в дальнейшем добавлять новые условия, то лучше его и использовать.

Компилятор может оптимизировать switch и превратить его в хеш-таблицу, что будет работать быстрее, чем куча if-else. Если условий очень много, то имеет смысл задуматься над этим.
Алексей Щербаков
Алексей Щербаков
14 410
Лучший ответ
Mikom Mikom Спасибо, основное, что хотел узнать это то, что switch не используется для вычислений, значит не получится у меня сделать тоже самое со switch :)
Оператор switch может иметь смысл, если мы сравниваем значение одной и той же переменной с несколькими наперед известными вариантами. Если вариантов три или больше, то switch может выглядеть опрятнее, чем серия условиях операторов.

if (Start % 2 == 0) { … }
else { … }

можно было бы записать так:

int ostatok = Start % 2;
switch (ostatok) {
case 0: …
break;
default: …
break;
}

Но толку от этого я не вижу.
PJ
Prostoi_ Jandos
61 627
uint oddNumbersCount = 0; // нечетные числа
uint evenNumberCount = 0; // четные числа

Console.WriteLine("Введите первое число диапазона");
int minValue = int.Parse(Console.ReadLine());
Console.WriteLine("Введите последнее число диапазона");
int maxValue = int.Parse(Console.ReadLine());

while (minValue <= maxValue) // если мин. число меньше или равно макс. то цикл продолжается
{

if (minValue % 2 == 0) // если мин. число делится на 2 без остатка, то выполняется - кол-во чет. чисел + 1

{
evenNumberCount++;
}

else // если же это условие не выполняется, то выполняется - кол-во нечет. чисел + 1
{
oddNumbersCount++;
}

minValue++; // затем снова прибавляем к мин. числу + 1 и сравниваем его (начало цикла)

}

Console.WriteLine("Количество нечетных чисел: " + oddNumbersCount);
Console.WriteLine("Количество четных чисел: " + evenNumberCount);
Console.ReadLine();

Так лучше)
А то у тебя куча лишних строк
Bmv Is-My-Life
Bmv Is-My-Life
16 997