首页 > 解决方案 > 使用 Modulus 进行偶数/奇数循环计数

问题描述

我正在尝试创建询问用户是否要输入数字的代码。然后它会询问他们是否希望将数字显示为偶数或赔率,并为起点和终点取高点和低点。

public void RunExercise()
    {
        int runthroughs = 0;

        Console.WriteLine("Greetings, User!\nWelcome to the NumberPrinter!");
        Console.WriteLine("Do you want to quit (1), or print numbers (2)?");
        int userinp = int.Parse(Console.ReadLine());

        while (userinp != 1)
        {
            runthroughs = runthroughs + 1;

            Console.WriteLine("Do you want to print even (1) or odd (2) numbers?");
            int oddeveninp = int.Parse(Console.ReadLine());

            if (oddeveninp == 1 || oddeveninp == 2)
            Console.WriteLine("Please enter a maximum value:");
            int maxy = int.Parse(Console.ReadLine());
            Console.WriteLine("Now enter a minimum value:");
            int miny = int.Parse(Console.ReadLine());
            Console.WriteLine("Highest number? {0}", maxy);
            Console.WriteLine("Lowest number? {0}", miny);
            int i;
            for (i = miny; i <= maxy; i++)
            {
                if (i % 2 == 0)
                {
                    Console.WriteLine(i+ " ");
                }
                else if (i % 2 == 1)
                {
                    Console.WriteLine(i + " ");
                }
            }
       }
   }

就目前而言,无论用户提示输入奇数还是偶数,它都会打印出整个数字数组。

标签: c#

解决方案


您的循环应替换为:

        for (i = miny; i <= maxy; i++)
        {
            bool isEven = ( i  % 2 ) == 0;

            if ( isEven && oddeveninp == 1
              || !isEven  && oddeveninp == 2 )
            {
                Console.WriteLine( i );
            }
        }

主要问题是,如果数字是偶数,或者如果数字是奇数,则将数字写入控制台。由于任何数字都是奇数或偶数,这意味着您将始终打印i.

这里的关键点是当它是偶数并且用户选择打印偶数时你必须打印数字。相反,当它是奇数并且用户选择打印奇数时,您必须打印该数字。

希望这可以帮助。


推荐阅读