2017-04-22 72 views
0

試圖製作隨機生成X值在高值和低值之間的隨機數的代碼。代碼也應該防止生成相同的隨機數。RNG未知錯誤

這裏是我的代碼至今:

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

這裏有幾個問題:

首先 :您試圖在不同的函數中使用本地作用域的變量。

功能generatenewnumber() 從未聽說過lowrangehighrangenumberofgenerated

有兩種解決方法。一種是通過所需的變量作爲函數的參數:

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#?

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( 「數字」)不是有許多即

產生!含有(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. 
    } 

這消除了遞歸調用,可能會造成您的問題

+0

oops,我離開了「」在該行...(固定刪除「的」,因爲'數字'是生成的數字變量。然而,代碼仍然沒有運行...任何其他的想法:頁 –