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了,这是为什么?谢谢!我跟踪过,总是被还原。不知道为什么。
主函数中你定义的Dispute = 0
然后执行到Estimate中,将Dispute = 1,然后return,但是你return的只是函数的返回值,不是把Dispute 这个值改变了
你如果想要这个值在主函数中改变
主函数中应该
Dispute = TechniqueTowNumber.Estimate(Dispute,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;
}
原因是因为参数传递时并不会改变实参的值。只是在函数内部新建了另一个int对象。
可以对
public int Estimate(ref int Dispute, int Number)这样就会改变dispute的值
2、四楼、五楼说的前面添加ref也行,个人感觉前面加ref按引用传递。
总之两种方法都行,四楼只给了思路,五楼给了实例,平均分分数喽~~谢谢各位。呵呵