C # FizzBuzz Switch Solution - PullRequest
       9

C # FizzBuzz Switch Solution

0 голосов
/ 06 сентября 2018

Возможно ли создать решение FizzBuzz в C # с помощью конструкции switch. Я нашел решения, которые работают для JavaScript и других языков, но они (или эквивалент синтаксиса), похоже, не работают в C #.

Для справки, я напишу версию оператора if ниже:

for (int x = 1; x <= 15; x++)
        {
            if (x % 5 == 0 && x % 3 == 0)
                Console.WriteLine("FizzBuzz");
            else if (x % 5 == 0)
                Console.WriteLine("Buzz");
            else if (x % 3 == 0)
                Console.WriteLine("Fizz");
            else
                Console.WriteLine(x);
        }
        Console.ReadLine();

РЕДАКТИРОВАТЬ: забыл поставить код оператора switch, извините за это:

for (x = 1; x <= 15; x++)
{
    switch (x)
    {
        case (x % 3 == 0 && x % 5 == 0):
            Console.WriteLine("FizzBuzz");
            break;
        case (x % 5 == 0):
            Console.WriteLine("Buzz");
            break;
        case (x % 3 == 0):
            Console.WriteLine("Fizz");
            break;
        default:
            Console.WriteLine(x);
            break;
    }
}

Моя проблема с утверждениями по модулю. Ошибка: «Не удается неявно преобразовать тип bool в int. Я пытался заменить switch (x) на switch (true), но это мало помогает, просто изменяет ошибку на« Ожидается постоянное значение »для каждого из моих случаев.

1 Ответ

0 голосов
/ 06 сентября 2018

«Возможно ли создать решение 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);
}
...