C # при остановке цикла FOR он считает остальные числа как 0

1

Я пишу программу для своей домашней работы в классе, и я застрял. Программа спрашивает, сколько цифр вы напишете, а затем, когда вы закончите, подсчет нечетных и даже из массива (я имею в виду int[] i <- where я [1] я [2] и т.д.). Но он также должен иметь функцию "остановить" - когда вы пишете стоп, он должен остановиться и закончить свою работу, но проблема в том, что я делаю таблицу из 120 номеров, когда я останавливаю ее на восьмом номере, это подсчитывает числа от 9-120 как "0", и это говорит о четном числе. Как я могу его исправить?

namespace ConsoleApplication10
    {
       class Program
       {
        static void Main(string[] args)
        {

              int sum1 = 0, 
              sum2 = 0; 

            start: 
            Console.WriteLine("How many numbers?"); 
            string lenght = Console.ReadLine(); 
            int Arraylenght = 0;
            bool test = int.TryParse(lenght, out Arraylenght); 
            if (test == false) 
            { 
                Console.WriteLine("\n>> Error!\n"); 
                goto start; 
            }
            int[] Numbers = new int[Arraylenght]; 
            for (int i = 0; i < Arraylenght; i++) 
            { 

            start2: 
                Console.WriteLine("Enter number #{0}:", i + 1); 
                String UserInput = Console.ReadLine(); 
                bool test2 = int.TryParse(UserInput, out Numbers[i]); 
                if (test2 == false && UserInput != "stop") 
                {
                    Console.WriteLine("\n>> Error!\n"); 
                    goto start2; 
                } 
                if (UserInput == "stop")
                {
                    Console.WriteLine("\n>> Stopped!\n");
                    Arraylenght = i;
                }
            } 
            foreach (int number in Numbers) 
            {
                if (number % 2 == 0) sum1 = sum1 + 1; 
                if (number % 2 != 0) sum2 = sum2 + 1;
            }
            Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd  numbers" ); 
            Console.ReadKey();

        }
    }
}
Теги:
arrays
loops
count

2 ответа

0
Лучший ответ

foreach не останавливает вашу новую ArrayLength, ıt останавливает свой конец массива. Поэтому вы не должны использовать foreach, для которого вы должны использовать. Это значит; Вы должны использовать это:

   for(int x =0; x<=Arraylenght;x++)
   {
      if (Numbers[x] % 2 == 0) sum1 = sum1 + 1; 
      if (Numbers[x] % 2 != 0) sum2 = sum2 + 1;
   }
   Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd  numbers" );

вместо

    foreach (int number in Numbers) 
    {
        if (number % 2 == 0) sum1 = sum1 + 1; 
        if (number % 2 != 0) sum2 = sum2 + 1;
    }
    Console.WriteLine(sum1 + " even numbers" + " \n" + sum2 + " odd  numbers" );
  • 1
    Спасибо! Это сработало! Теперь я действительно получил это :)
  • 0
    Если это работает, вы можете сказать, что это ваш ответ на вопрос.
Показать ещё 3 комментария
0

При инициализации массива каждый элемент имеет значение 0, поэтому вы получаете 0 % 2 == 0 который оценивается как true. Теперь у вас есть два варианта: либо вы читаете только цифры, пока не дойдете до указанной точки остановки, либо используете List<int> который в основном представляет собой сильно типизированный динамический массив.
РЕДАКТИРОВАТЬ:
Вы также можете сделать его массивом нулевых ints, что позволяет любому значению массива представлять нулевое значение. Поскольку null % 2 оценивается как null, единственное другое редактирование, которое вы должны сделать, - это тест на нечетное число в конце.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню