尝试制作在高值和低值之间随机生成X量随机数的代码。该代码还应该防止生成相同的随机数。
这是我到目前为止的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Randonnumbers
{
class Program
{
static void Main(string[] args)
{
int lowrange = 0; // Establishing the variables for lowest number, highest number, and total numbers generated.
int highrange = 50;
int numberof = 10;
var generated = new List<int>(); // Creates a list of numbers that have been generated already to prevent double-ups.
var rng = new Random();
Console.WriteLine("Numbers Generated:");
while (numberof > 0) //Repeats this loop once for each "numberof". (until the number hits zero)
{
generatenewnumber(); //Calls the function above
}
Console.ReadLine(); // Here so the program doesnt instantly close
}
public void generatenewnumber()
{
int number = rng.Next(lowrange, highrange); //Sets the number to a random number between the high and low values.
if (!generated.Contains("number")) // Checks if the rg'd number has already been made.
{
generatenewnumber(); //If it has, it will re-run this function.
}
else
{
numberof = numberof - 1;
generated.Add(number); // Adds the genereated number to the list.
Console.WriteLine(number); // Prints the number.
}
}
}
}
不确定错误的位置。 程序不会运行,也不会显示任何错误。
也许它与在某个条件下从内部调用函数有关?老实说,我不知道,我是c#.c#
的新手答案 0 :(得分:0)
在行中:
if (!generated.Contains("number")) // Checks if the rg'd number has already been made.
{
generatenewnumber(); //If it has, it will re-run this function.
}
应该!generated.Contains(“number”)没有数字,即
generated.Contains(8);!?
或变量
int temp = 8;
!generated.Contains(temp);
虽然非常不可能,但在其自身内部调用“generatenewnumber()”有可能无限生成列表中已有的数字。如果你设置一个do / while()循环怎么办:像
public void generatenewnumber()
{
int number;
do
{
number = rng.Next(lowrange, highrange); //Sets the number to a random number between the high and low values.
}while(generated.Contains(number)) // Checks if the rg'd number has already been made.
numberof = numberof - 1;
generated.Add(number); // Adds the genereated number to the list.
Console.WriteLine(number); // Prints the number.
}
这将删除可能导致您的问题的递归调用
答案 1 :(得分:0)
这里有几个问题:
首先:您正尝试在不同的函数中使用具有局部作用域的变量。
功能generatenewnumber()
从未听说过lowrange
,highrange
,numberof
或generated
。
有两种方法可以解决这个问题。一种是将所需的变量作为函数的参数传递:
public static void generatenewnumber(int lowrange, int highrange, int numberof, List<int> generated)
另一个是全局宣布它们。为此,你必须在类中声明它们,但在任何函数之外。
第二次:您需要调用一个函数并让它永久更改传递的值,例如使用numberof
。这不起作用。通常,参数是“按值调用”,这意味着函数中的变量只是原始变量的一个副本,所有更改都不是持久的。如果您希望它们是持久的,您必须进行“按引用调用”。这可能如下所示:
public static void generatenewnumber(int lowrange, int highrange, ref int numberof, ref List<int> generated)
像这样被召唤:
generatenewnumber(lowrange, highrange, ref numberof, ref generated);
<强>第三强>:
rng.Next
不是真正的命令。您可以在此处找到正确的方法:
How do I generate a random int number in C#?