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();
}
}
}
展开
 我来答
不屑宠儿
2013-02-09 · TA获得超过578个赞
知道小有建树答主
回答量:373
采纳率:0%
帮助的人:398万
展开全部
啊??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是用系统时间作为随机种子,你那样快速输出,可能在同一时间,那样随机数就很可能一样了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式