分配随机数c#

时间:2014-04-16 05:34:08

标签: c#

我要做的是检索随机的“x”和“y”值,将它们分配给我的每个陷阱。我已经学会了如何获取特定范围内的随机数,但我已经尝试了各种方法来检索第一个随机xvalue和yvalue来分配它们,但我收到了“System.Random”。

编辑:谢谢大家的答案和帮助,但我仍然不清楚如何获取随机值并分配它们。我想要做的是,如果我把3作为陷阱的数量,程序将给出6个值,3为x坐标,3为y,我无法弄清楚我是如何得到它们的。例如。 x的RNG值是(4,7,1),y值是(8,1,6)。我试图让它成为trap1将值(4,8)分配给它trap2(7,1)和trap3(1,6)。任何指导或提示都会有所帮助。

    Console.WriteLine ("Please enter the number of traps.");

    Random rndX = new Random ();
    Random rndY = new Random ();
    int traps;

    traps = Convert.ToInt32 (Console.ReadLine ());
    Console.WriteLine ("X coordinates for the traps", traps);

    for (int X = 1; X <= traps; X++) 
    {
        Console.Write ("{0}", rndX.Next (1, 11)); 
        Console.WriteLine ();
    }

    Console.WriteLine ("Y coordinates for the traps");
    for (int Y = 1; Y <= traps; Y++) 
    {
        Console.Write ("{0}", rndY.Next (1, 11));
        Console.WriteLine ();
    }

我试图检索随机值

    Console.WriteLine ("{0,0}",rndX, rndY);
谢谢你仔细研究:D 任何提示或指导如何我应该这样做将不胜感激

6 个答案:

答案 0 :(得分:2)

你需要使用相同的随机数生成器,C#中的RNG是一个被破坏的算法,并且默认情况下还使用时间戳种子实现,因此很容易实现两者:

rndX.Next()
rndY.Next()

将返回相同的数字,因为它们的指令速度非常快,因此有效地创建了相同的时间戳。而是调用相同的RNG两次,并使用数组索引来选择一个值,如下所示:

var arrX= new int[] {1,2,3};
var arrY = new int[] { 6,7,8};
Console.WriteLine ("{0},{1}",arrX[rndX.Next(3)], arrY[rndX.Next(3))];

答案 1 :(得分:1)

这是错误的,它在随机类上调用ToString()方法,因此输出System.Random

Console.WriteLine ("{0,0}",rndX, rndY);

您需要使用{0}{1}为第一个和第二个值正确索引值。

Console.WriteLine ("{0}, {1}",rndX.Next(1, 11), rndY.Next(1, 11));

答案 2 :(得分:0)

您必须像在代码的其他部分中那样调用Next()方法。

最后一行代码隐式调用ToString()类实例上的Random,它输出类类型(在这种情况下为"System.Random")。

答案 3 :(得分:0)

试试这个

Console.WriteLine ("{0},{1}",rndX.Next(), rndY.Next());

答案 4 :(得分:0)

使用这些值后,除非您保存它们,否则它们将被处理掉。

Console.WriteLine ("Please enter the number of traps.");

Random rnd = new Random ();
int traps;

traps = Convert.ToInt32 (Console.ReadLine ());
Console.WriteLine ("X coordinates for the traps", traps);

for (int X = 1; X <= traps; X++) 
{
    int rx = rnd.Next (1, 11);
    Console.Write ("{0}", rx); 
    Console.WriteLine ();
}

Console.WriteLine ("Y coordinates for the traps");
for (int Y = 1; Y <= traps; Y++) 
{
    int ry = rnd.Next (1, 11);
    Console.Write ("{0}", ry); 
    Console.WriteLine ();
}

此外,您只需要一个随机对象。

因为您在循环中检索值,所以您应该查看单个值的类,并使用List来存储这些值的集合。

更新

以下是使用类和列表的示例:

public class Trap
{
    public int X = 0;
    public int Y = 0;
}

Console.WriteLine("Please enter the number of traps.");

Random rnd = new Random();
int amount;
List<Trap> traps = new List<Trap>();
amount = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Coordinates for {0} traps", amount);
for(int i = 0; i < amount; i++)
{
    Trap temp = new Trap();
    temp.X = rnd.Next(1, 11);
    temp.Y = rnd.Next(1, 11);
    Console.WriteLine("Coordinates for Trap {0} - {1},{2}", i + 1, temp.X, temp.Y);
    traps.Add(temp);
}

每个陷阱坐标都在列表traps中(例如,坐标1是traps[0]

答案 5 :(得分:0)

您是否尝试过此代码:

 public string GetRandomNumber(Int32 digit)
{
    if (digit < 0) digit *= -1;
    if (digit == 0) digit = 1;
    Random rn = new Random();
    string r = "";
    for (int i = 1; i <= digit; i++)
    {
        r += "9";
    }
    return rn.Next(Convert.ToInt32(r)).ToString();
}