简体   繁体   English

C#使用一种方法来检查数字是素数,不是素数还是负数

[英]C# use a method to check if number is Prime, not Prime or negative

For a school practice school assignment we have to create a little program that uses a bool method to calculate if a number is prime or not. 对于学校实习学校作业,我们必须创建一个小程序,该程序使用布尔方法来计算数字是否为质数。 It also has to check if a number is negative. 它还必须检查数字是否为负。 If 0 is entered it will stop asking numbers and ends the program. 如果输入0,它将停止询问数字并结束程序。 (I've added a screenshot of the assignment) (我添加了作业的屏幕截图)

作业截图

I've managed to make the Prime checking part. 我设法使总理检查部分。 When i enter a negative number it will display: Negative number, after that it will still calculate if it's a prime yes or no. 当我输入一个负数时,它将显示:负数,此后仍会计算它是质数是还是否。 The same with ending the program. 与结束程序相同。 It first calculates if 0 is a prime number and then ends it. 它首先计算0是否是质数,然后结束。

How do i fix that? 我该如何解决?

This is my code: 这是我的代码:

static void Main(string[] args)
    {

        int entered_number = 1;


        while (entered_number != 0)
        {

            //ask for user entry
            Console.Write("enter a number: ");
            entered_number = int.Parse(Console.ReadLine());

            if (entered_number < 0)
            {
                Console.WriteLine("Number is negative");
            }

            //variable for subprogram
            bool prime = IsPrimeNumber(entered_number);

            //output
            if (prime == true)
            {
                Console.WriteLine("Number is Prime");
            }

            else if (prime == false)
            {
                Console.WriteLine("Number is not Prime");
            }

        }

        Console.WriteLine("End of program");
        Console.ReadKey();


    }
    //subprogram
    static bool IsPrimeNumber(int entered_number)
    {
        //count
        int count = 0;

            for (int i = 1; i <= entered_number; i++)
            {
                if (entered_number % i == 0)
                {
                    count++;
                }
            }

            if (count == 2)
            {
                return true;
            }

            else if (count != 2 && entered_number != 0)
            {
                return false;
            }

        return false;
    }

If someone knows how please let me know. 如果有人知道怎么办,请告诉我。

Yours sincerely, 此致,

Max van Kekeren 马克斯·范·凯克伦

Ask the user for input at least once before the while loop. while循环之前,至少要求用户输入一次。 This will ensure that if the first number they enter is 0, the program will end as expected. 这将确保如果他们输入的第一个数字为0,程序将按预期结束。 Currently it uses 1 the first time running, then asks for user input and runs all the code anyway. 当前,它在第一次运行时使用1,然后要求用户输入并始终运行所有代码。 As for your if (entered_number < 0) statement, rather put all the code as an else to this if statement so that if the number is negative your program just asks the user for input again. 至于您的if (entered_number < 0)语句,宁愿将所有代码作为else语句放置到此if语句中,以便如果该数字为负数,则程序只要求用户再次输入即可。 See example below (I left out the first suggestion, you need to do some of the coding yourself :p): 参见下面的示例(我省略了第一个建议,您需要自己进行一些编码:p):

while (entered_number != 0)
{

    //ask for user entry
    Console.Write("enter a number: ");
    entered_number = int.Parse(Console.ReadLine());

    if (entered_number < 0)
    {
        Console.WriteLine("Number is negative");
    }
    else 
    {
        //variable for subprogram
        bool prime = IsPrimeNumber(entered_number);

        //output
        if (prime == true)
        {
            Console.WriteLine("Number is Prime");
        }

        else if (prime == false)
        {
            Console.WriteLine("Number is not Prime");
        }
    }
}

Console.WriteLine("End of program");
Console.ReadKey();

use do while , your code will be executed at least once. 使用do while ,您的代码将至少执行一次。

 int entered_number = 0;
        do
        {
            //ask for user entry
            Console.Write("enter a number: ");
            entered_number = int.Parse(Console.ReadLine());

            if (entered_number < 0)
            {
                Console.WriteLine("Number is negative");
            }
            else if (entered_number > 0)
            {
                Console.WriteLine(IsPrimeNumber(entered_number) ? "Number is Prime" : "Number is not Prime");
            }
            else
            {
                break;
            }
        }
        while (entered_number != 0);

        Console.WriteLine("End of program");
        Console.ReadKey();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM