A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵科铭 中级黑马   /  2014-3-16 20:41  /  1759 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵科铭 于 2014-3-20 00:32 编辑
  1.         for (int i = 0; i < 10; i++)
  2.             {
  3.                 ColumnDefinition colDef = new ColumnDefinition();
  4.                 gridGame.ColumnDefinitions.Add(colDef);

  5.                 RowDefinition rowDef = new RowDefinition();
  6.                 gridGame.RowDefinitions.Add(rowDef);
  7.             }
复制代码
  1. for (int i = 0; i < 10; i++)
  2.             {
  3.                 for (int j = 0; j < 10; j++)
  4.                 {
  5.                     Image img = new Image();

  6.                     Random rand = new Random();
  7.                     int imgNum = rand.Next(1,10);//随机生成1-9的数
  8.                     img.Source = new BitmapImage(new Uri("imgs/"+imgNum+".jpg",UriKind.Relative));

  9.                     Grid.SetRow(img,i);
  10.                     Grid.SetColumn(img,j);

  11.                     gridGame.Children.Add(img);
  12.                 }
  13.             }
复制代码

为什么生成图片是这样的?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 mdb 于 2014-3-16 21:53 编辑

把   Random rand = new Random();放到循环外面试试
Random是一个产生伪随机数字的类,直接New Random()的话它会根据触发那刻的系统时间做为种子,来产生一个随机数字,直接每次都重新NEW一下,而且计算机运行很快所以可能会产生一样的随机数,伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
mdb 发表于 2014-3-16 21:42
把   Random rand = new Random();放到循环外面试试
Random是一个产生伪随机数字的类,直接New Random()的 ...

你的意思 是 如果每次在 for循环里  new Random()的话,很可能一样?
回复 使用道具 举报
每次for循环都创建一个Random类对象,因为for很快,这样会让每次创建时用的种子几乎一样,而放到外面,就会避免这样的问题,只创建一次。
回复 使用道具 举报
赵科铭 发表于 2014-3-16 22:30
你的意思 是 如果每次在 for循环里  new Random()的话,很可能一样?

是的,最好放到两个for循环之外...
回复 使用道具 举报
随机种子跟系统时间有关,内层程序运行是非常快的毫秒可能都不到,所以系统一毫秒内你随机数随机种子相同,只用一个种子就行了,放到外层循环外边
回复 使用道具 举报
请把问题设置为提问结束,这样可以给你加分。。
回复 使用道具 举报
czwanglei 发表于 2014-3-19 10:42
请把问题设置为提问结束,这样可以给你加分。。

怎么设置啊?
回复 使用道具 举报

编辑帖子。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马