Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在计算c时使用正确的数字#_C#_Pass By Reference_Primes_Greatest Common Divisor - Fatal编程技术网

C# 在计算c时使用正确的数字#

C# 在计算c时使用正确的数字#,c#,pass-by-reference,primes,greatest-common-divisor,C#,Pass By Reference,Primes,Greatest Common Divisor,用户输入两个素数,然后将它们相乘,完成(A-1)*(b-1)的另一个计算(A和b是输入的素数)。用于检查输入的数字的功能,如果数字不是素数,将要求用户重新输入数字。然而,当我测试这个时,我注意到如果用户输入一个不是素数的数字,然后重新输入一个素数,那么计算是基于这个不是素数的数字的。例如,如果用户输入2和4,由于4不是素数,因此要求他们输入另一个数字,例如3,计算将基于数字2和4 我怎样才能纠正这一点,使其采用有效的素数,而不是最初输入的无效数 namespace example { class

用户输入两个素数,然后将它们相乘,完成(A-1)*(b-1)的另一个计算(A和b是输入的素数)。用于检查输入的数字的功能,如果数字不是素数,将要求用户重新输入数字。然而,当我测试这个时,我注意到如果用户输入一个不是素数的数字,然后重新输入一个素数,那么计算是基于这个不是素数的数字的。例如,如果用户输入2和4,由于4不是素数,因此要求他们输入另一个数字,例如3,计算将基于数字2和4

我怎样才能纠正这一点,使其采用有效的素数,而不是最初输入的无效数

namespace example
{
class Program
{
    class Co_P
    {
            
        static void coprime(ref int c, int calculation)
        {

            if (gcd(c, calculation) == 1)
                Console.WriteLine("it's Co-Prime");

            else
                do
                {
                    Console.WriteLine("it isn't Co-Prime");
                    Console.WriteLine("Enter a Co-Prime");
                    c = int.Parse(Console.ReadLine());
                    coprime(ref c, calculation);
                } while (gcd(c, calculation) != 1);
        }

        static int Prime_a(int a) //check a is prime

        {
            if (a <= 1) return 0;
            for (int i = 2; i <= a / 2; i++)
            {
                if (a % i == 0)
                {
                    return 0; //not prime
                }
            }
            return 1;
        }

        static void result(int a) //outputs if a is prime/or not 
        {

            if (Prime_a(a) != 0)
            {
                Console.WriteLine(a + " is a prime number");
            }

            else do
                {
                    Console.WriteLine(a + " isn't prime number");
                    Console.WriteLine();
                    Console.WriteLine("Please make sure you enter a prime number");
                    a = int.Parse(Console.ReadLine());

                } while (Prime_a(a) == 0);
        }

        static int Prime_b(int b)

        {
            if (b <= 1) return 0;
            for (int i = 2; i <= b / 2; i++)
            {
                if (b % i == 0)
                {
                    return 0;  
                }
            }
            return 1;
        }

        static void resultb(int b) 
        {
            int result = Prime_b(b);

            if (Prime_b(b) != 0)
            {
                Console.WriteLine(b + " is a prime number");
            }

            else do
                {
                    Console.WriteLine(b + " is not a prime number");
                    Console.WriteLine("Please make sure you enter a prime number");
                    b = int.Parse(Console.ReadLine());

                } while (Prime_b(b) == 0);
        }

        static void Main(string[] args)
        {
            int a;
            Console.WriteLine("Enter a prime number for a");
            a = int.Parse(Console.ReadLine());
            Console.WriteLine();
            result(a);
            Console.WriteLine();

           int b;
            Console.WriteLine("Enter a prime number for b");
            b = int.Parse(Console.ReadLine());
            Console.WriteLine();
            resultb(b);
            Console.WriteLine();

           int total = a * b; 
           Console.WriteLine("The total of the prime numbers is = " + total);

            int calculation = (a - 1) * (b - 1); //calculation 
            Console.WriteLine();
            Console.WriteLine("The result = " + calculation);
            Console.WriteLine();

        }
    }
}
名称空间示例
{
班级计划
{
班级合作
{
静态void互质(参考int c,int计算)
{
如果(gcd(c,计算)=1)
Console.WriteLine(“它是联合主控”);
其他的
做
{
Console.WriteLine(“它不是联合素数”);
Console.WriteLine(“输入共同质数”);
c=int.Parse(Console.ReadLine());
互质(参考文献c,计算);
}而(gcd(c,计算)!=1);
}
静态整数素数\u a(整数a)//检查a是否为素数
{

if(a您应该扩展
result
resultb
函数,以便它返回新的提示有效数字

静态整数结果(整数a){
var结果=素数a(a);
如果(结果!=0)
密码
返回结果
}
也不要忘记重新分配这些值

…代码。。。
a=结果(a);
密码
b=结果b(b);

您应该扩展
result
resultb
函数,以便它返回新的提示有效数字

静态整数结果(整数a){
var结果=素数a(a);
如果(结果!=0)
密码
返回结果
}
也不要忘记重新分配这些值

…代码。。。
a=结果(a);
密码
b=结果b(b);
行内
resultb(b);
int
传递给方法
resultb
int
是一种值类型,或者换句话说,将
int
传递给方法意味着将其值传递给方法,在该方法中创建该值的副本。在这种情况下,将在方法
resultb
中创建
的副本更改
b
内部方法
resultb
时,副本和原件保持不变

resultb
方法中,通过添加
ref
关键字,通过引用传递参数

static void resultb(int b)
{
    // code
}
方法将如下所示

static void resultb(ref int b)
{
    // code
}
您将以这种方式调用该方法

resultb(ref b);
下面是代码的一部分

    int b;
    Console.WriteLine("Enter a prime number for b");
    b = int.Parse(Console.ReadLine());
    Console.WriteLine();
    resultb(ref b);
    Console.WriteLine();
现在,在方法
resultb
内部传递的
b
上的每一个更改都将反映在原始方法上

对于方法
result(inta)
,也应该这样做

行内
resultb(b);
int
传递给方法
resultb
int
是一种值类型,或者换句话说,将
int
传递给方法意味着将其值传递给方法,在该方法中创建该值的副本。在这种情况下,将在方法
resultb
中创建
的副本更改
b
内部方法
resultb
时,副本和原件保持不变

resultb
方法中,通过添加
ref
关键字,通过引用传递参数

static void resultb(int b)
{
    // code
}
方法将如下所示

static void resultb(ref int b)
{
    // code
}
您将以这种方式调用该方法

resultb(ref b);
下面是代码的一部分

    int b;
    Console.WriteLine("Enter a prime number for b");
    b = int.Parse(Console.ReadLine());
    Console.WriteLine();
    resultb(ref b);
    Console.WriteLine();
现在,在方法
resultb
内部传递的
b
上的每一个更改都将反映在原始方法上


对于方法
result(int a)

静态无效resultb(int b)
您可能需要了解变量的作用域。如果您使用调试器逐步完成程序,您会发现在非素数输入的情况下,变量在
result()或
resultb()的作用域中
设置为新输入,而不是
Main()
范围内的变量。从设计角度来看,在两(三)个位置读取输入也很奇怪。要么使用一个方法读取输入并将其返回到
Main()
,要么在
Main()中完全处理输入
。那么你不需要两者,
Prime_a()
Prime_b()
它们做的事情完全一样。同样的情况也适用于
result()
result_b()
Prime_a()
(或
Prime_b()
)您应该考虑返回<代码> BOOL 而不是<代码> INT/COM>。不相关:请不要标记垃圾邮件。“Primes”或“GCD”都不是问题的一部分。<代码>静态无效结果(int b)
您可能想了解变量的作用域。如果使用调试器逐步完成程序,您会发现在非素数输入的情况下,
result()
resultb()作用域中的变量设置为新输入,而不是
Main()作用域中的变量
。从设计角度来看,在两(三)个位置读取输入也很奇怪。要么有一个方法读取输入并将其返回到
Main()
,要么在
Main()
中完全处理输入。然后,您不需要同时使用
Prime_a()
Prime_b()<代码>结果>()/<代码> >代码> >结果TB()>代码>。对于<代码> PrimeEy()>代码>(或代码> PrimeIb()>代码>,您应考虑返回<代码> Boo.<代码>,而不是<代码> INT/C>。不相关:请不要标记垃圾邮件。“Primes”或“GCD”都不。是问题的一部分。你是什么意思?是的,我知道。这就是为什么我在挣扎。你的答案没有错。但是