C#在停止FOR循环时,将其余数字计为0

时间:2014-05-26 17:47:26

标签: c# arrays loops count

我正在为我的课堂作业编写程序,而且我被困了。 程序会询问你要编写多少个数字,然后当你完成它时会从数组中计算奇数和偶数(我的意思是int[] i< - 其中i [1] i [2]等。 )。但它也必须有一个"停止"功能 - 当你写停止它应该停止并完成它的工作 - 但问题是当我制作一个例如120数字表时,当我在第8个数字上停止时,它将数字从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();

        }
    }
}

2 个答案:

答案 0 :(得分:0)

foreach不会停止你的新ArrayLength,它会停止它的数组结束。所以你不应该使用你应该使用的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)

初始化数组时,每个项目都设置为0,因此得到0 % 2 == 0,其值为true。您现在有两个选项:要么只读取要显示的数字,直到达到指定的停止点,或者使用基本上是强类型动态数组的List<int>
编辑:
您还可以使其成为可为空的int数组,这使得数组的任何值都可以表示空值。由于null % 2评估为null,因此您必须进行的唯一其他编辑是在最后测试奇数。