C# 为什么控制台只给我偶数?
我必须表达第2行、第3行、第4行、第5行、第6行、第7行等的前100个成员。我对C#syntax还不熟悉,仍在学习,并做类似这样的练习以供复习。我很确定我知道我想要什么:做一个for循环,并在其中嵌套一个if语句,它只需在奇数前面加一个减号“-”C# 为什么控制台只给我偶数?,c#,loops,C#,Loops,我必须表达第2行、第3行、第4行、第5行、第6行、第7行等的前100个成员。我对C#syntax还不熟悉,仍在学习,并做类似这样的练习以供复习。我很确定我知道我想要什么:做一个for循环,并在其中嵌套一个if语句,它只需在奇数前面加一个减号“-” static void Main() { for (int chislo = 2; chislo < 102; chislo++) { if (chislo % 2 == 0)
static void Main()
{
for (int chislo = 2; chislo < 102; chislo++)
{
if (chislo % 2 == 0)
{
Console.WriteLine(chislo);
}
else
{
Console.Write("-",chislo);
}
}
}
static void Main()
{
for(int-chislo=2;chislo<102;chislo++)
{
如果(chislo%2==0)
{
控制台写入线(chislo);
}
其他的
{
Console.Write(“-”,chislo);
}
}
}
正如HimBromBeere所回答的,您需要在“”和chislo之间添加+。此外,在IF中使用WriteLine也没有意义
如果希望数字在同一行上,代码应该是这样的
public static void Main()
{
for (int chislo = 2; chislo < 102; chislo++)
{
if (chislo % 2 == 0)
{
Console.Write(chislo);
}
else
{
Console.Write("-" + chislo + " ");
}
}
}
publicstaticvoidmain()
{
for(int-chislo=2;chislo<102;chislo++)
{
如果(chislo%2==0)
{
Console.Write(chislo);
}
其他的
{
Console.Write(“-”+chislo+”);
}
}
}
另外,由于您询问为什么它只给出偶数,因为在控制台上,当涉及数字3时,写入(“-”,chislo),它进入else,只取负数(“-”),因为在-和chislo之间没有+运算符
):) 正如其他人提到的,您使用的是
控制台。写(“-”,chislo)
不正确。此特定方法调用尝试使用第一个字符串作为模板,使用其余参数(在您的情况下只有一个)作为要插入字符串的项来执行字符串格式。由于您没有占位符({x}
其中x
是参数索引),因此它将不做任何操作,只需打印模板字符串而不做任何更改
要演示如何使用原始代码,可以这样做。(我在这里假设您希望所有这些都在同一行上。在您的示例中,您在if语句中使用了一个write行,这将导致一个新行被启动):
for(int-chislo=2;chislo<102;chislo++)
{
如果(chislo%2==0)
{
Console.Write(chislo);
}
其他的
{
//正确使用格式化方法
Console.Write(“-{0}”,chislo);
}
//如果您想用逗号分隔数字
if(chislo<101)
{
控制台。写(“,”;
}
}
但是,如果您碰巧使用了至少c#6,那么您可以使用它来将您的逻辑放入字符串生成中。我并不主张在生产中使用这种方法而不进行一些清理,但它确实证明了另一种选择
for (int chislo = 2; chislo < 102; chislo++)
{
Console.Write($"{(chislo % 2 == 0 ? "" : "-")}{chislo}{(chislo < 101 ? "," : "")}");
}
for(int-chislo=2;chislo<102;chislo++)
{
Write($“{(chislo%2==0?”:“-”}{chislo}{(chislo<101?”,“:”)}”);
}
这里有一些我还没有提到的东西需要记住。考虑下面两行代码之间的差异:
Console.Write("-" + chislo); // Line 1
Console.Write(-chislo); // Line 2
第1行是我在其他答案中看到的原始代码的更正形式。但是第2行更简单:它不是构造一个字符串来表示
chislo
的负值,而是将负值本身传递给控制台。Write
,让该函数担心如何格式化它。我认为这是一个更干净,更容易理解。另一个优点是控制台。Write
将使用用户机器上定义的适用区域设置呈现数值。因此,例如,如果有人使用了除-
以外的负号符号,他们将看到他们习惯于使用这种方法的符号。Console.WriteLine(“-”+chislo.ToString())代码>查看您做错了什么。Console.Write(“-”,chislo)
不是已经提到上述内容的人。然而,因为它没有解释为什么操作码不起作用,它被否决了,所以他们删除了它。我还指出,不是在这个特殊情况下,如果没有变化,它对负数不起作用。我同意,尽管它更干净。谢谢你的评论,@Bronumski。我同意一个完整的答案应该用OP的初始方法来解释问题,而不仅仅是建议一种不同的方法。我的答案更多的是作为其他答案的补充,因为这些答案太长,无法作为评论发布。谢谢!谢谢你的其他答案!最后一件事。我读过你提到的字符串格式方法。“-{0}”,chislo)和“{0}”,chislo”之间有区别吗?@kirillmladenov它们产生的输出是相同的,但是,第一个是在-
字符串后面加上一个数字。另一种是将chislo数的负数注入一个空字符串,这是一个多余的调用,最好调用(-chislo.ToString();是的,我明白了,连接是个问题。Мерси! : )
Console.Write("-" + chislo); // Line 1
Console.Write(-chislo); // Line 2