问题描述
||
我正在尝试从此处进行fizzbuzz程序:为什么程序员不能编程?
\“编写一个程序,打印从1到100的数字。但是,对于三个数字的倍数,请打印\” Fizz \“,而不是数字;对于五个数字的倍数,请打印\” Buzz \“。对于这三个数字的倍数和五个打印“ FizzBuzz”。
protected void btn1_Click(object sender,EventArgs e)
{
for (int i = 1; i < 101; i++)
{
if (i % 3 == 0 & i % 5 == 0)
{
Response.Write(\"fizzbuzz\" + \",\");
}
else if (i % 3 == 0)
{
Response.Write(\"fizz\" + \",\");
}
else if (i % 5 == 0)
{
Response.Write(\"buzz\" + \",\");
}
else
{
i = i + 0;
}
Response.Write(i +\",\");
}
}
我能够产生某种结果,例如:
1,2,fizz,3,4,buzz,5,fizz,6,7,8,fizz,9,buzz,10,11,fizz,12,13,14,fizzbuzz,15,16,17,fizz, 18,19,buzz,20,fizz,21,22,23,fizz,24,buzz,25,26,fizz,27,28,29,fizzbuzz,30,31,32,fizz,33,34,buzz, 35,fizz,36、37、38,fizz,39,依此类推。
单词fizz已打印,但未替换3,并且fizzbuzz已打印但未替换15,因此...
解决方法
无论是否达到if条件,您都仍在代码末尾打印
i
。
专门查看您的for循环:
for (int i = 1; i < 101; i++)
{
if (i % 3 == 0 & i % 5 == 0)
{
Response.Write(\"fizzbuzz\" + \",\");
}
else if (i % 3 == 0)
{
Response.Write(\"fizz\" + \",\");
}
else if (i % 5 == 0)
{
Response.Write(\"buzz\" + \",\");
}
else
{
i = i + 0;
}
Response.Write(i +\",\"); //look here you print i
}
因此,您需要移动最后一个Response.Write(i + \“,\”);在最后的“ 3”状态。查找此类错误的最简单方法是使用调试器并调试程序。然后,您将轻松查看输出是什么。因此,一定要使用调试器并设置断点/监视,并观察发生的情况。您的代码应更改为:
for (int i = 1; i < 101; i++)
{
if (i % 3 == 0 & i % 5 == 0)
{
Response.Write(\"fizzbuzz\" + \",\");
}
else if (i % 3 == 0)
{
Response.Write(\"fizz\" + \",\");
}
else if (i % 5 == 0)
{
Response.Write(\"buzz\" + \",\");
}
else
{
Response.Write(i +\",\"); //look here you print i
}
}
请注意,删除i=i+1
表示您的for
循环已经通过增加i来处理此问题。
编辑不确定这是否更容易,但这是使用lambda的另一种方法:
List<int> t;
t = Enumerable.Range(1,100).ToList();
var fizzBuzz = t.Where(num => num % 3 == 0 && num % 5 == 0);
var fizz = t.Where(num => num % 3 == 0);
var buzz = t.Where(num => num % 5 == 0);
var notFizzBuzz = t.Where(num => num % 3 != 0 && num % 5 !=0);
//print fizzBuzz elements
Console.WriteLine(\"Printing fizzBuzz elements...\");
foreach (int i in fizzBuzz)
Console.WriteLine(i);
//print fizz elements
Console.WriteLine(\"Printing fizz elements...\");
foreach (int i in fizz)
Console.WriteLine(i);
//print buzz elements
Console.WriteLine(\"Printing buzz elements...\");
foreach (int i in buzz)
Console.WriteLine(i);
//print other elements
Console.WriteLine(\"Printing all others...\");
foreach (int i in notFizzBuzz)
Console.WriteLine(i);
,尝试这些更改
protected void btn1_Click(object sender,EventArgs e)
{
for (int i = 1; i < 101; i++)
{
if (i % 3 == 0 & i % 5 == 0)
{
Response.Write(\"fizzbuzz\" + \",\");
}
else if (i % 3 == 0)
{
Response.Write(\"fizz\" + \",\");
}
else if (i % 5 == 0)
{
Response.Write(\"buzz\" + \",\");
}
else
{
Response.Write(i +\",\");
}
}
}
您的i = i + 0
显然不起作用,因为您将i的值加0。
而且,无论if / else块的结果如何(将其放在其后),您都将数字打印到响应上,因此应将其移动到else(意味着仅在if或else if不匹配时打印) 。
,将ѭ10移入决赛
,protected void btn1_Click(object sender,\");
}
else
{
i = i + 0; //this is totally useless
Response.Write(i + \",\");
}
//Response.Write(i +\",\"); //This will always write the number,even if you wrote fizz or buzz
}
}
,它的另一个简单实现:
for (int i = 1; i <= 100; i++)
{
Console.WriteLine((i % 3 == 0) ? ((i % 5 == 0) ? \"FizzBuzz\" : \"Fizz\") : ((i % 5 == 0) ? \"Buzz\" : i.ToString()));
}
Console.ReadKey();
, public static void PrintMod3And5FromInterval(int start,int end)
{
if (end < start)
{
Console.WriteLine(\"End number should be higher than start.\");
}
else
{
string result = \"\";
for (int x = start; x <= end; x++)
{
if (x % 3 == 0)
result += \"fizz\";
if (x % 5 == 0)
result += \"buzz\";
if (result == \"\")
Console.WriteLine(x);
else
Console.WriteLine(result);
result = \"\";
}
}
}
static void Main(string[] args)
{
PrintMod3And5FromInterval(1,100);
Console.Read();
}
,这是我最初的解决方案...
for (let number = 1; number <= 100; number ++) {
if (number % 3 === 0 && number % 5 === 0) {
console.log(number + \"fizzbuzz\");
} else if (number % 5 === 0) {
console.log(number + \"buzz\");
} else if (number % 3 === 0)
console.log(number + \"fizz\");
else {
console.log(number);
}
}
但是这个要短得多...
for (let n = 1; n <= 100; n++) {
let output = \"\";
if (n % 3 == 0) output += \"Fizz\";
if (n % 5 == 0) output += \"Buzz\";
console.log(output || n);
}