現在、重複のない1から45までの乱数を生成するプログラムを作成しようとしています。私のプログラムは、else文を使わずに実行すると、重複が出てくるたびに、関数elseが使用されたときに番号0を入力します。私は1と45の間の乱数を表示したいが、可変サイズは配列のサイズを指示しなければならない。 c#重複のない配列の乱数ジェネレータ
public static int[] InitializeArrayWithNoDuplicates(int size)
{
int number;
int[] noDuplicates = new int[size];
for (int i = 0; i < size; i++)
{
number = rng.Next(1, size);
if (!noDuplicates.Contains(number))
noDuplicates[i] = number;
// else
// i--;
}
return noDuplicates;
が、私はそれを修正するかどうかはわからないよ:たとえば35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RandomArray
{
public class RandomArrayNoDuplicates
{
static void Main(string[] args)
{
int size = 45;
int[] noDuplicateArray = new int[size];
noDuplicateArray = InitializeArrayWithNoDuplicates(size);
DisplayArray(noDuplicateArray);
ExitProgram();
} //end Main
static Random rng = new Random();
/// <summary>
/// Creates an array with each element a unique integer
/// between 1 and 45 inclusively.
/// </summary>
/// <param name="size"> length of the returned array < 45
/// </param>
/// <returns>an array of length "size" and each element is
/// a unique integer between 1 and 45 inclusive </returns>
///
static void ExitProgram()
{
Console.Write("\n\nPress any key to exit program: ");
Console.ReadKey();
}//end ExitProgram
public static int[] InitializeArrayWithNoDuplicates(int size)
{
int number;
int[] noDuplicates = new int[size];
for (int i = 0; i < size; i++)
{
number = rng.Next(1, size);
if (!noDuplicates.Contains(number))
noDuplicates[i] = number;
// else
// i--;
}
return noDuplicates;
}
static void DisplayArray(int[] noDuplicates)
{
foreach (int element in noDuplicates)
{
Console.Write("\t" + element + "\n");
}
}
}
}
のアレイサイズで1と45の間のランダムな整数問題は、このコードのビットです。私は、列挙可能なアプローチを使用するのではなく、random.next関数を使用することをお勧めします。おかげ
と
昇給の例外ArgumentOutOfRangeException例外が表示されますか? – Blacktempel