首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNG未知误差

RNG未知误差
EN

Stack Overflow用户
提问于 2017-04-22 04:03:10
回答 2查看 36关注 0票数 0

试图使代码在高值和低值之间随机生成X个随机数。代码还应防止生成相同的随机数。

下面是我到目前为止掌握的代码:

代码语言:javascript
复制
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#很陌生

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-22 05:16:59

这里有几个问题:

First:您试图在不同的函数中使用具有本地作用域的变量。

generatenewnumber()函数从未听说过lowrangehighrangenumberofgenerated

有两种方法可以解决这个问题。一种是将所需的变量作为函数的参数传递:

代码语言:javascript
复制
public static void generatenewnumber(int lowrange, int highrange, int numberof, List<int> generated) 

另一种是在全球范围内宣布它们。为此,您必须在类中声明它们,但必须在任何函数之外声明它们。

第二个:您可以调用一个函数,并让它永久地更改传递的值,比如使用numberof。这不是这样的。通常参数是“按值调用”,这意味着函数中的变量只是原始变量的副本,所有更改都不是持久的。如果你希望它们是持久的,你必须做一个“通过引用调用”。这可能如下所示:

代码语言:javascript
复制
public static void generatenewnumber(int lowrange, int highrange, ref int numberof, ref List<int> generated)

然后接到这样的电话:

代码语言:javascript
复制
generatenewnumber(lowrange, highrange, ref numberof, ref generated);

第三次rng.Next不是真正的命令。您可以在这里找到正确的方法:How do I generate a random int number in C#?

票数 0
EN

Stack Overflow用户

发布于 2017-04-22 04:09:59

在队伍中:

代码语言:javascript
复制
        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);?

或者一个变量

代码语言:javascript
复制
int temp = 8;
!generated.Contains(temp);

尽管不太可能,但在其内部调用"generatenewnumber()“可能会无限地生成已经在列表中的数字。如果您设置了do/while()循环怎么办:类似于

代码语言:javascript
复制
    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. 
    }

这将删除可能导致问题的递归调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43555088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档