我目前有一个学校作业,主要专注于面向对象编程&使用集合。
我知道大部分事情是如何完成的,但我似乎遇到了障碍:
我编写了我的程序,因此它生成10个对象,将它们放在List<T>
&amp;然后将它们输出到 ListBox 。
哪种方法很好,但由于某种原因,每个对象都接收到相同的精确值,即使它们应该是(伪)随机的。
这是对象的类(名为Boom),包括它的构造函数:
public class Boom
{
public static int aantalBomen = 0;
public enum boomType { Naald, Loof }
public boomType BoomType { get; set; }
public int VolgNr { get; set; }
private int aantalVogels;
public int AantalVogels
{
get { return aantalVogels; }
set
{
if (value >= 0 && value <= 10)
aantalVogels = value;
}
}
public Eekhoorn Eekhoorn { get; set; }
private int hoogte;
public int Hoogte
{
get { return hoogte; }
set
{
if (value >= 5 && value <= 10)
hoogte = value;
}
}
public bool eekHoorn = false;
public Boom()
{
aantalBomen++;
VolgNr = aantalBomen;
Random rnd = new Random();
Hoogte = rnd.Next(5, 11);
AantalVogels = rnd.Next(0, 11);
BoomType = (boomType)Enum.GetValues(typeof(boomType)).GetValue(rnd.Next(0, Enum.GetValues(typeof(boomType)).Length));
}
public void MaakEekhoorn()
{
Eekhoorn = new Eekhoorn();
eekHoorn = true;
aantalVogels = (int)Math.Round((double)(aantalVogels / 2), 0);
}
}
&安培;这是创建10个对象的循环:
public List<Boom> Bomen = new List<Boom>();
for (int i = 1; i <= 10;i++ )
{
Bomen.Add(new Boom());
}
最后,我用来测试对象创建的代码:
for (int i = 0;i<10;i++)
{
lstBomen.Items.Add("VolgNr: " + bos.Bomen[i].VolgNr.ToString() + " AantalVogels: " + bos.Bomen[i].AantalVogels.ToString() + " BoomType: " +
bos.Bomen[i].BoomType.ToString() + " Hoogte: " + bos.Bomen[i].Hoogte.ToString());
}
我似乎无法弄清楚为什么我的代码会为所有10个对象生成完全相同的值,从而产生如下输出:
如果您需要更多关于代码或与程序执行相关的任何信息,请随时提问。
答案 0 :(得分:2)
因为您始终使用相同的种子值,Random
将始终生成相同的序列。您可以将i
传递给承包商,并将其更改为:
public Boom(int seed)
{
...
Random rnd = new Random(i);
...
}
每次运行代码时都要获得不同的数字:
Random rnd = new Random();
public List<Boom> Bomen = new List<Boom>();
for (int i = 1; i <= 10;i++ )
{
Bomen.Add(new Boom(rnd.Next()));
}
或者,只需将rnd
传递给构造函数。