Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么控制台只给我偶数?_C#_Loops - Fatal编程技术网

C# 为什么控制台只给我偶数?

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)

我必须表达第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)
            {
                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