Почему консоль дает мне только четные числа? - PullRequest
0 голосов
/ 12 июня 2018

Я должен выразить первые 100 членов строки 2, -3,4, -5,6, -7 и т. Д. Я новичок в синтаксисе 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 голосов
/ 12 июня 2018

Как уже упоминали другие, вы используете Console.Write("-",chislo) неправильно.Этот конкретный вызов метода пытается выполнить формат строки, используя первую строку в качестве шаблона и остальные параметры (только один в вашем случае) в качестве элементов для вставки в строку.Поскольку у вас нет заполнителей ({x}, где x - индекс параметра), он ничего не будет делать и просто распечатает строку шаблона без изменений. См. Здесь .

Чтобы продемонстрировать использование исходного кода, вы можете сделать это.(Я предполагаю, что вы хотите, чтобы все это было в одной строке. В вашем примере вы используете строку записи в операторе 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, вы можете использовать интерполяцию строк , которая позволяет вам использовать свою логику в генерации строк.Я не защищаю использование этого в производстве без некоторой очистки, но это действительно демонстрирует альтернативу.

for (int chislo = 2; chislo < 102; chislo++)
{
  Console.Write($"{(chislo % 2 == 0 ? "" : "-")}{chislo}{(chislo < 101 ? "," : "")}");
}
0 голосов
/ 12 июня 2018

Вот что нужно иметь в виду, о чем я еще не упоминал.Обратите внимание на разницу между следующими двумя строками кода:

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

Строка 1 - это исправленная форма вашего исходного кода, которую я видел в других ответах.Но строка 2 проще: вместо создания строки для представления отрицательного значения chislo она сама передает отрицательное значение в Console.Write, что позволяет этой функции беспокоиться о том, как ее отформатировать.Я думаю, что это немного чище и легче для понимания.Также полезно то, что Console.Write будет отображать числовое значение с использованием соответствующих настроек региона, определенных на компьютере пользователя.Поэтому, если, например, кто-то использует символ отрицательного знака, отличный от -, он увидит символ, к которому он привык при таком подходе.

0 голосов
/ 12 июня 2018

Поскольку HimBromBeere ответил, вам нужно добавить + между "" и числом.Также нет смысла иметь WriteLine в IF.

Вот как должен выглядеть ваш код, если вы хотите, чтобы числа были в одной строке

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, оно переходит в остальное и принимает только минус ("-"), поскольку у вас нет оператора + между - и числом.

Късмет!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...