高手请进来 一般人解决不了

kevin_zwy 2013-04-10 10:16:13
很奇怪的问题?
下面的代码用调试单步能生成3个不同的随机数,但是直接运行,3个随机数相同 ,求解释???
我使用注释的代码运行又能生成3个不同的随机数, 求解释?、、




namespace Computer
{
class Computer
{
public Computer() { }

/// <summary>
/// 价格
/// </summary>
public int Price { get; set; }

/// <summary>
/// 购买日期
/// </summary>
public string Date { get; set; }

/// <summary>
/// 电脑ID
/// </summary>
public string ID { get; set; }

/// <summary>
/// 型号
/// </summary>
public string Type { get; set; }

public void ShowID() {
Random rand = new Random();
this.ID = Type +"--"+ rand.Next(1000,9999);
}

//public void ShowType(Computer[] comp) {
// Random rand = new Random();
// foreach (Computer item in comp)
// {
// item.ID = Type + "--" + rand.Next(1000, 9999);
// }
// }
}

class Program
{
static void Main(string[] args)
{
Computer[] computer = new Computer[] { new Computer(),new Computer(),new Computer()};
computer[0].Price = 10000;
computer[0].Date = "2009-12-09";
computer[0].Type = "HP001";
computer[0].ShowID();

computer[1].Price = 5000;
computer[1].Date = "2010-12-09";
computer[1].Type = "IBM001";
computer[1].ShowID();

computer[2].Price = 8000;
computer[2].Date = "2012-12-09";
computer[2].Type = "IBM002";
computer[2].ShowID();
// computer[0].ShowType(computer);


Console.WriteLine("电脑型号\t价格为\t\t购买日期为\t\t电脑编号");
foreach (Computer item in computer)
{
Console.WriteLine("{0}\t\t{1}\t\t{2}\t\t{3}",item.Type,item.Price,item.Date,item.ID);
}
Console.ReadLine();
}
}
...全文
470 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cfan 2013-04-11
  • 打赏
  • 举报
回复
int r = new Random().Next(0, 255); Thread.Sleep(15); int g = new Random().Next(0, 255);
yqb_last 2013-04-11
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
C# code?12345 private static Random rand = new Random(); public void ShowID() { this.ID = Type +"--"+ rand.Next(1000,9999); }
这可以使用
catchdream 2013-04-11
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
C# code?12345 private static Random rand = new Random(); public void ShowID() { this.ID = Type +"--"+ rand.Next(1000,9999); }
这个应该可以
u010229236 2013-04-11
  • 打赏
  • 举报
回复
不懂帮顶,感谢分享
Conmajia 2013-04-11
  • 打赏
  • 举报
回复
上面的2和5就是“CPU过快”造成的类似4的情况
Conmajia 2013-04-11
  • 打赏
  • 举报
回复
u010258224 2013-04-11
  • 打赏
  • 举报
回复
这个还真不会呢,在线等答案
xiejin90314 2013-04-11
  • 打赏
  • 举报
回复
楼主才知道随机数就是会随机相同的。,你了解了java的随机数的原理你就知道了。。。哈哈。大学第一课就是这个
  • 打赏
  • 举报
回复
引用 15 楼 seasonhdyy 的回复:
要么楼主试试用Sleep几毫秒试一试? Thread.Sleep(100); 放在你认为可能造成频繁的地方。
这个想法也太“奢侈”了!电脑不是个人摆设,只要用它来执行值钱的业务操作,我们就不要“故意”随便让电脑空转。
  • 打赏
  • 举报
回复

        private  static Random rand = new Random();

        public void ShowID() {
            this.ID = Type +"--"+ rand.Next(1000,9999);
        }
还照虚 2013-04-10
  • 打赏
  • 举报
回复
要么楼主试试用Sleep几毫秒试一试? Thread.Sleep(100); 放在你认为可能造成频繁的地方。
threenewbee 2013-04-10
  • 打赏
  • 举报
回复
引用 10 楼 jkjkp2000 的回复:
刚又去测试过 放在方法外面确实不行 版主可以测试下
放在外面,你要把里面的都删除。
niss 2013-04-10
  • 打赏
  • 举报
回复
引用 12 楼 jkjkp2000 的回复:
恩 试了你的 是可以啊 Guid.NewGuid().GetHashCode()); 这个是以豪秒以单位吗
cpu运算很快,单纯用时间做种子没用,你可以直接在for循环试试Console多次时间,是一样的,但GUID不一样,他包含了时间,但还包含其他的东西,所以每次生成都不一样的
kevin_zwy 2013-04-10
  • 打赏
  • 举报
回复
恩 试了你的 是可以啊 Guid.NewGuid().GetHashCode()); 这个是以豪秒以单位吗
niss 2013-04-10
  • 打赏
  • 举报
回复
汗,为啥不试试我的,服了,用GUID是没问题的
kevin_zwy 2013-04-10
  • 打赏
  • 举报
回复
刚又去测试过 放在方法外面确实不行 版主可以测试下
threenewbee 2013-04-10
  • 打赏
  • 举报
回复
放在外面绝对有用。请你仔细一点。
threenewbee 2013-04-10
  • 打赏
  • 举报
回复
因为Random rand = new Random();使用当前时间作为种子初始化随机数产生器。 而计算机运行很快,超过计时精度。所以连续调用3次产生的种子相同,所以产生的随机数相同。 放在方法外面,直接从一个随机数序列获取,种子只产生一次,就不会有问题了。
wj2002160416 2013-04-10
  • 打赏
  • 举报
回复
通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值,因而会产生几组相同的随机数。
kevin_zwy 2013-04-10
  • 打赏
  • 举报
回复
4楼的 放在外面没用 我放在构造函数中都没用
加载更多回复(5)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧