试图使代码在高值和低值之间随机生成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#很陌生
发布于 2017-04-22 05:16:59
这里有几个问题:
First:您试图在不同的函数中使用具有本地作用域的变量。
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#?
发布于 2017-04-22 04:09:59
在队伍中:
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(“数字”)没有数字
!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.
}这将删除可能导致问题的递归调用。
https://stackoverflow.com/questions/43555088
复制相似问题