我正在使用StringBuilder将列表转换为单个字符串。我不希望字符串有换行符,但它会自动为附加到字符串的每个列表值添加一个新行。
for (int i = 1; i <= ruleN; i++)
{
string fizz = "F";
string buzz = "B";
string fizzBuzz = "FB";
List<string> numberSet = new List<string>();
if(i % ruleA == 0 && i % ruleB != 0) //if i is devisible by A
//but not B
{
numberSet.Add(fizz);
}
if(i % ruleB == 0 && i % ruleA != 0) //if i is devisible by B
//but not A
{
numberSet.Add(buzz);
}
if(i % ruleA == 0 && i % ruleB ==0) //if i is devisible by both
//A and B
{
numberSet.Add(fizzBuzz);
}
if(i % ruleA != 0 && i % ruleB != 0) //if i is devisible by
//neither A nor B
{
//convert the number to a string and add it to list numberSet
string undevisible = Convert.ToString(i);
numberSet.Add(undevisible);
StringBuilder Builder = new StringBuilder();
foreach (string number in numberSet)
{
// Append each string to the StringBuilder overload.
Builder.Append(number).Append(" ");
}
string output = Builder.ToString();
Console.WriteLine(output);
输出最终看起来像这样:
新行来自何处?
答案 0 :(得分:5)
他们来自你的Console.WriteLine(output)
。请注意,这是在for
循环中。
答案 1 :(得分:2)
对于每个&#39; i&#39;,您构建一个StringBuilder并编写Console.WriteLine。这是换行符。也许你的cicle必须在StringBuilder创建之前停止?
答案 2 :(得分:0)
Console.WriteLine正是如此,因此对于通过第一个for循环的每次迭代,您正在向控制台写一个新行。如果你想在一行中使用它我会建议使用另一个stringbuilder对象来保存你想要写入控制台的所有内容,然后在for循环之后执行console.writeline。
答案 3 :(得分:0)
第一个循环在控制台中打印后关闭,因此每次迭代都会创建一个具有新值的新字符串构建器,然后使用println()方法打印该字符串,该方法以新行打印,
还尝试优化代码,为什么不在if语句中使用Builder.Append()而不要使用列表类型定义变量?
如果您的代码正是这样做的,那么就不需要为该列表浪费内存。
此致
Hana Bizhani