«Возможно ли создать решение FizzBuzz в C # с помощью конструкции switch»
Да, это возможно, но не очень практично (по сравнению с оператором if
). Это потому, что вы включаете выражение, а затем ваши операторы case должны сравнивать константное выражение с этим значением. Таким образом, вы не можете сделать switch (0)
, а затем case (i % 15)
, потому что i % 15
не является константным выражением.
Учитывая это, вы можете включить i % 15
, чтобы уменьшить количество сравнений с известным базовым набором, а затем в специальном случае результаты, которые делятся на 3, 5 и 15:
for (int x = 1; x <= 15; x++)
{
switch (x % 15)
{
// Evenly divisible by 15
case 0:
Console.WriteLine("FizzBuzz");
break;
// Evenly divisible by 3
case 3:
case 6:
case 9:
case 12:
Console.WriteLine("Fizz");
break;
// Evenly divisible by 5
case 5:
case 10:
Console.WriteLine("Buzz");
break;
// Everything else
default:
Console.WriteLine(x);
break;
}
}
Но утверждение if
гораздо лаконичнее:
for (int x = 1; x <= 15; x++)
{
if (x % 15 == 0) Console.WriteLine("FizzBuzz");
else if (x % 3 == 0) Console.WriteLine("Fizz");
else if (x % 5 == 0) Console.WriteLine("Buzz");
else Console.WriteLine(x);
}