C# 关于RNG和静态真空总管的混淆

C# 关于RNG和静态真空总管的混淆,c#,random,C#,Random,在我们班上,我们有一个任务,创建一个随机数生成器。 生成器应该使随机生成的数字的X个数介于高范围和低范围之间。它还应该将生成的项目放入一个数组中,并进行检查以确保它不会两次包含相同的随机生成的数字 Visual studio没有出现任何错误,尽管在我尝试测试运行该程序时可能会出现一些错误,因为该程序会立即关闭。 前面的错误消息告诉我程序没有使用静态main,尽管现在它刚刚关闭,没有任何反馈 你知道为什么会这样吗? (可能是显而易见的,我对c#很陌生) 代码: 使用系统; 使用System.Col

在我们班上,我们有一个任务,创建一个随机数生成器。 生成器应该使随机生成的数字的X个数介于高范围和低范围之间。它还应该将生成的项目放入一个数组中,并进行检查以确保它不会两次包含相同的随机生成的数字

Visual studio没有出现任何错误,尽管在我尝试测试运行该程序时可能会出现一些错误,因为该程序会立即关闭。

前面的错误消息告诉我程序没有使用静态main,尽管现在它刚刚关闭,没有任何反馈

你知道为什么会这样吗? (可能是显而易见的,我对c#很陌生)

代码:

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间随机数
{
班级计划
{
int lowrange=0;//为生成的最低编号、最高编号和总数建立变量。
int高量程=50;
整数=10;
公共void Main(字符串[]参数)
{
while(numberof>0)//对每个“numberof”重复此循环一次(直到数字达到零)
{
numberof=numberof-1;
generatenewnumber();//调用上面的函数
}
如果(numberoff==0)
{
Console.ReadLine();//在这里,程序不会立即关闭
}
}
public void generatenewnnumber()
{
var rng=新随机数();
int number=rng.Next(下限,上限);//将数字设置为介于上限和下限值之间的随机数。
var generated=new List();//创建已生成的数字列表,以防止重复。
if(!generated.Contains(number))//检查是否已生成rg'd编号。
{
generatenewnumber();//调用上面的函数
}
其他的
{
numberof=numberof-1;
generated.Add(number);//将生成的编号添加到列表中。
Console.WriteLine(数字);//打印数字。
Console.ReadLine();
}
}
}
}

谢谢:p

static main()
是控制台应用程序的入口点。如果没有,应用程序将无法启动。将你的
main()
设置为静态。“它还应该……检查以确保它不会包含两次相同的随机生成的数字。”--仅供参考:如果你这样做,那么你的数字实际上不是随机的。它们只是一个简单的数字序列,被洗牌了。如果你在调试器中运行,它应该会告诉你抛出了什么异常并终止了程序。根据上面显示的代码,我将猜测
StackOverflowException
,因为您的
Contains()
检查似乎是反向的。应该是
if(generated.Contains(number)){…}
,而不是
if(!generated.Contains(number)){…}
。并不是说这是一种选择唯一数字的好方法,但至少它会更有效。@PeterDuniho捕捉得很好。而
generatenewnumber()
也需要是静态的,因为
Main()
是静态的,您已经足够让程序运行和关闭了,这表明您上面发布的代码不是实际使用的代码(因为,如上面的注释所述,入口点必须是
static
方法)。因此,剩下的就是如何选择唯一的随机数。你的基本错误是打字错误。有关如何实现此功能的更多信息,请参阅标记的重复项。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randomnumbers
{
    class Program
    {
        int lowrange = 0; // Establishing the variables for lowest number, highest number, and total numbers generated.
        int highrange = 50;
        int numberof = 10;

        public void Main(string[] args)
        {
            while (numberof > 0) //Repeats this loop once for each "numberof". (until the number hits zero)
            {
                numberof = numberof - 1;
                generatenewnumber(); //Calls the function above
            }
            if (numberof == 0)
            {
                Console.ReadLine(); // Here so the program doesnt instantly close
            }
        }

        public void generatenewnumber()
        {
            var rng = new Random();
            int number = rng.Next(lowrange, highrange); //Sets the number to a random number between the high and low values.
            var generated = new List<int>(); // Creates a list of numbers that have been generated already to prevent double-ups.
            if (!generated.Contains(number)) // Checks if the rg'd number has already been made.
            {
                generatenewnumber(); //Calls the function above
            }
            else
            {
                numberof = numberof - 1;
                generated.Add(number); // Adds the genereated number to the list.
                Console.WriteLine(number); // Prints the number. 
                Console.ReadLine();
            }
        }
    }
}