C#中使用泛型类和接口出现的一个问题,代码如下,每次运行结果产生的都是 A A B B 为什么呢?
publicinterfaceTit{intRandom();}classProgram{staticvoidMain(string[]args){TankT=newTa...
public interface Tit
{
int Random();
}
class Program
{
static void Main(string[] args)
{
Tank T = new Tank();
Rocket Rt = new Rocket();
Weapon<Tank> TA = new Weapon<Tank>();
Weapon<Rocket> RK = new Weapon<Rocket>();
Console.WriteLine(TA.RRandom());
Console.WriteLine(T.Random());
Console.WriteLine(RK.RRandom());
Console.WriteLine(Rt.Random());
Console.ReadKey();
}
}
class Tank:Tit
{
public int Random()
{
Random R = new Random();
return R.Next(5, 30);
}
}
class Rocket : Tit
{
public int Random()
{
Random R = new Random();
return R.Next(1, 6);
}
}
class Weapon<T> where T : Tit, new()
{
T t = new T();
public int RRandom()
{
return t.Random();
}
}
} 展开
{
int Random();
}
class Program
{
static void Main(string[] args)
{
Tank T = new Tank();
Rocket Rt = new Rocket();
Weapon<Tank> TA = new Weapon<Tank>();
Weapon<Rocket> RK = new Weapon<Rocket>();
Console.WriteLine(TA.RRandom());
Console.WriteLine(T.Random());
Console.WriteLine(RK.RRandom());
Console.WriteLine(Rt.Random());
Console.ReadKey();
}
}
class Tank:Tit
{
public int Random()
{
Random R = new Random();
return R.Next(5, 30);
}
}
class Rocket : Tit
{
public int Random()
{
Random R = new Random();
return R.Next(1, 6);
}
}
class Weapon<T> where T : Tit, new()
{
T t = new T();
public int RRandom()
{
return t.Random();
}
}
} 展开
1个回答
展开全部
啊??AABB你输出的是int型 啊??! 我调试了,没错啊。。你断点调试一下~
追问
是输出2组2个相同的int 的但是不知道为什么,随机数字不是应该不一样吗?每次调用方法重新生成
追答
Console.WriteLine(TA.RRandom());
Console.WriteLine(T.Random());
Console.WriteLine(RK.RRandom());
Console.WriteLine(Rt.Random());
你是说这4个的输出么,是不一样的呀。
哦,想起来了。你可能是时间太短了。所以生成的是一样的。这样有两个方法,一个是你在两个调用中间放个Thread.Sleep(1000);这样就保证没问题了
还有一种比较高效的,就是自己做随机种子。也就是下面这个方法。
int iSeed=10;
Random ro = new Random(10);
long tick = DateTime.Now.Ticks;
Random ran = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32));
这样可以保证99%不是一样。
你也知道Random是用系统时间作为随机种子,你那样快速输出,可能在同一时间,那样随机数就很可能一样了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询