2014-04-16 137 views
0

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

编辑:谢谢大家的答案和帮助,但我仍然不清楚我如何获得随机值并分配它们。我试图做的是,如果我把3作为陷阱的数量,程序会给出6个值,3对于x坐标,3对于y,我有什么麻烦计算出我是如何得到它们的。例如。 x的RNG值是(4,7,1),y值是(8,1,6)。即时尝试使它陷阱1将有值(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 任何提示或引导到我应该怎么做,这将是极大的赞赏

+0

INT N = rndX。接下来(); int n = rndY .Next(); –

+0

只是改变了我的答案来匹配它,只需使用可接受值的数组,选择一个随机小于数组大小的整数,并抓取相应的元素。见下文。 – evolvedmicrobe

回答

0

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

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

1

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

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

,需要准确索引使用{0}{1}用于第一和第二值的值。

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

试试这个

Console.WriteLine ("{0},{1}",rndX.Next(), rndY.Next()); 
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]

+0

谢谢你对我的代码和问题的回答/评论,但我仍然无法做我想做的事。目标是如果我输入3作为陷阱数量,并且我收到3个X值和3个Y值,我如何将它们分配或保存到陷阱中。 EG随机x值(3,7,1),随机y值(4,6,2)如何从每个值中提取第一个数字并将它们分配给单个陷阱,使陷阱1为(3,4)陷阱2 (7,6)和陷阱3(1,2)。任何帮助或指导将不胜感激:D – Parti

+0

在我的答案最后一句话讨论这一点。 – tinstaafl

+0

@Parti我添加了更多代码供您查看。 – tinstaafl

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))]; 
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(); 
}