using System;
using System.Collections.Generic;
using System.Text;namespace Prime_Number
{
    class TechniqueTow
    {        static void Main(string[] args)
        {
            char yes = 'y';
            while (yes == 'y')
            {
                int Dispute = 0;
                Console.Write("请输入一个数:");
                int Number = int.Parse(Console.ReadLine());
                TechniqueTow TechniqueTowNumber = new TechniqueTow();
                TechniqueTowNumber.Estimate(Dispute,Number );
                if (Dispute == 1)
                {
                    char Submultiple;
                    Console.WriteLine("请选择是否计算素数的因数,计算输入y,不计算输入n");
                    Submultiple = char.Parse(Console.ReadLine());
                    if (Submultiple == 'y')
                        TechniqueTowNumber.Submultiple(Number);
                }
                Console.WriteLine("请选择是否继续,继续输入y,退出输入n");
                yes = char.Parse(Console.ReadLine());
            }
            
        }        public int Estimate(int Dispute, int Number)
        {
            int a = 0;
            if (Number == 2)
                a = 0;
            else if (Number == 1)
                a = 0;
            else
            {
                for (int i = 2; i < Number; i++)
                {
                    if (Number % i == 0 && a == 0)
                    {
                        Console.WriteLine("您输入的不是一个素数!");
                        a = 1;
                        Dispute = 1;
                        break;
                    }
                }
            }
            if (a == 0) 
               Console.WriteLine("您输入的是一个素数!");
            return Dispute;                       
        }        private void Submultiple(int Number)
        {
            Console.WriteLine("--------------------");
            Console.WriteLine("这个数字的因数有:");
            for (int i = 2; i < Number; i++)
            {
                if (Number % i ==0)
                    Console.WriteLine("{0}",i);
            }
        }
    }
}
编译通过,但是在运行的时候,从Estimate穿出来的Dispute值,如果是1了,但是回来main里面就在TechniqueTowNumber.Estimate(Dispute,Number )中又被还原成了0了,这是为什么?谢谢!我跟踪过,总是被还原。不知道为什么。

解决方案 »

  1.   

    作用域问题,
    主函数中你定义的Dispute = 0
    然后执行到Estimate中,将Dispute = 1,然后return,但是你return的只是函数的返回值,不是把Dispute 这个值改变了
    你如果想要这个值在主函数中改变
    主函数中应该
    Dispute = TechniqueTowNumber.Estimate(Dispute,Number );
      

  2.   

    从Estimate穿出来的Dispute值,如果是1了,但是回来main里面就在TechniqueTowNumber.Estimate(Dispute,Number )中又被还原成了这句话解释下。。
      

  3.   

    你把Dispute 前面加个ref就可以了。
      

  4.   

        public int Estimate(ref int Dispute, int Number)
            {
                int a = 0;
                if (Number == 2)
                    a = 0;
                else if (Number == 1)
                    a = 0;
                else
                {
                    for (int i = 2; i < Number; i++)
                    {
                        if (Number % i == 0 && a == 0)
                        {
                            Console.WriteLine("您输入的不是一个素数!");
                            a = 1;
                            Dispute = 1;
                            break;
                        }
                    }
                }
                if (a == 0) 
                   Console.WriteLine("您输入的是一个素数!");
                return Dispute;                       
            }
      

  5.   

    Dispute =TechniqueTowNumber.Estimate(Dispute,Number );这样附值
    原因是因为参数传递时并不会改变实参的值。只是在函数内部新建了另一个int对象。
    可以对
    public int Estimate(ref int Dispute, int Number)这样就会改变dispute的值
      

  6.   

    从Estimate穿出来的Dispute值,如果是1了,但是回来main里面就在TechniqueTowNumber.Estimate(Dispute,Number )中又被还原成了0了你这个代码就像1楼那样说的,你都没字段来接受这个传回来的值,所以根本称不上有值传回,更说不上被还原了
      

  7.   

    1、一楼说的给Dispute一个变量来接受,方法可以,我试过了。谢谢
    2、四楼、五楼说的前面添加ref也行,个人感觉前面加ref按引用传递。
    总之两种方法都行,四楼只给了思路,五楼给了实例,平均分分数喽~~谢谢各位。呵呵