C#FizzBu zz交换机解决方案

问题描述 投票:-3回答:1

是否可以使用switch结构在C#中创建FizzBu​​zz解决方案。我找到了适用于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();

编辑:忘了把我的开关语句代码,抱歉:

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),但这没有多大帮助,只是将错误更改为”我希望每个案例的常量值“。

c# switch-statement fizzbuzz
1个回答
0
投票

“是否可以使用交换机构造在C#中创建FizzBu​​zz解决方案”

是的,这是可能的,但不是很实用(与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);
}
© www.soinside.com 2019 - 2024. All rights reserved.