是否可以使用switch结构在C#中创建FizzBuzz解决方案。我找到了适用于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#中创建FizzBuzz解决方案”
是的,这是可能的,但不是很实用(与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);
}