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

时间:2018-06-12 13:19:51

标签: c# loops

我必须表达行2,-3,4,-5,6,-7等的前100名成员。我是C#语法的新手,仍在学习它并做这样的练习以供审阅。我很确定我知道自己想要什么:做一个for循环并在其中嵌套一个if语句,只需添加一个减号' - '在奇数前面。

static void Main()
    {


        for (int chislo = 2; chislo < 102; chislo++)
        {
            if (chislo % 2 == 0)
            {
                Console.WriteLine(chislo);
            }
            else
            {
                Console.Write("-",chislo);
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

正如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 + " ");
        }
    }
}

另外,既然你问为什么它只给你偶数,因为在Console.Write("-", chislo)当涉及到数字3时,它会进入其他地方并且只接受减号(“ - ”),因为你没有在 - 和chislo之间有一个+运算符。

Късмет! :)

答案 1 :(得分:1)

正如其他人所说,您错误地使用了Console.Write("-",chislo)。此特定方法调用尝试使用第一个字符串作为模板和其余参数(在您的情况下只有一个)作为要插入字符串的项目来执行字符串格式。由于您没有占位符({x}其中x是参数索引),因此它不会执行任何操作,只会打印出未更改的模板字符串。 See here

要使用原始代码进行演示,您可以执行此操作。 (我在这里假设您希望这一切都在同一行。在您的示例中,您在if语句中使用写行,这将导致新行被启动):

for (int chislo = 2; chislo < 102; chislo++)
{
  if (chislo % 2 == 0)
  {
    Console.Write(chislo);
  }
  else
  {
    //Using the format method correctly
    Console.Write("-{0}", chislo);
  }
  //If you want your numbers seperated by commas
  if (chislo < 101)
  {
    Console.Write(",");
  }
}

但是,如果您碰巧使用至少c#6,则可以使用string interpolation,这允许您将逻辑放入字符串生成中。我没有提倡在没有清理的情况下在生产中使用它,但它确实证明了替代方案。

for (int chislo = 2; chislo < 102; chislo++)
{
  Console.Write($"{(chislo % 2 == 0 ? "" : "-")}{chislo}{(chislo < 101 ? "," : "")}");
}

答案 2 :(得分:0)

请记住,我还没有看到提到过的东西。考虑以下两行代码之间的区别:

Console.Write("-" + chislo);  // Line 1
Console.Write(-chislo);       // Line 2

第1行是我在其他答案中看到的原始代码的更正形式。但第2行更简单:它不是构造一个字符串来表示chislo的负值,而是将负值本身传递给Console.Write,允许该函数担心如何格式化它。我认为这更清洁,更容易理解。它的优点还在于Console.Write将使用用户计算机上定义的适用区域设置呈现数值。例如,如果有人使用除-以外的负号符号,他们就会看到他们习惯使用此符号的符号。