2013-10-23 43 views
0

我正在试图制作一个Rock Paper Scissors游戏作为我的第一个'项目',所以我需要计算机从1-3生成一个随机数来表示轮到他们。无法生成随机数Visual C#

我一直想这个代码,但我想不出为什么它不工作:

Random rnd = new Random(); 
int pchand= rnd.Next(1, 4); 

有一个红色波浪线下方RND,上面写着:

A field initializer cannot reference the non-static field, method, or property FileName.Form1.rnd 

感谢您的任何帮帮我!

+0

你可以包含Form1的代码吗? –

+2

你把它放在方法里面吗?或者只是在课堂上? – Andrey

+2

这是一个令人难以置信的不好主意:'int pchand = new Random()。Next(1,4);' –

回答

10

问题在于,您是在课堂级别而不是功能级别进行此操作。

在课堂上宣布你是随机的,但创建pchand应该在一个函数内完成。

喜欢的东西:

public class Test 
{ 
    static Random rnd = new Random(); 

    public static void Main() 
    { 
     int pchand = rnd.Next(1, 4); 
    } 
} 

为什么你原来的尝试会导致编译时错误是因为编译器不保证其字段初始化顺序的原因。因此,在使用之前,不能保证rnd将被设置。因此,编译器会阻止您这样做,以避免在运行时出现意外的空引用错误。


注到OP:包括你的代码更加延长样品将允许进行更具体的解决您的问题,但我希望我的示例代码是通用让你了解你需要做什么

+0

+1,但请解释为什么“创建pchand应该在一个函数内完成” – Tarik

+1

@Tarik:为了避免错误? :P ...会在 – musefan

+0

中添加一些东西你显然正在处理一个初学者。让我们试着帮助他理解**为什么**,而不仅仅是**他应该修正什么**。 – Tarik