c# - 如何让我的程序生成一个新的随机数,直到它找到一个以前没有使用过的随机数?

标签 c#

好吧,标题可能有点误导,但我实在想不出更好的解释来解决我的问题。我正在尝试创建一个程序,它接受一个名字数组和一个姓氏数组,并将它们放在一个全名数组中。这里的问题是我试图确保同一个名字不会出现两次,这样如果 firstname[randomindex] 和 lastname[randomindex] 的组合已经在全名数组中,它将重新滚动随机数用于索引,直到找到未使用的组合。到目前为止,我还停留在这个问题上:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _100randompersons
{
class Fyldefylde
{
    private string[] firstnames;
    private string[] lastnames;
    private string[] fullnames;
    private Random random;

    public Fyldefylde()
    {
        firstnames = new string[10] { "Kim", "Allan", "Frank", "Lone", "Line", "Anne", "Per", "Bo", "Grethe", "Mette" };
        lastnames = new string[10] { "Pedersen", "Nielsen", "Hansen", "Larsen", "Nygaard", "Harboe", "Bendix", "Højris", "Pilgaard", "Nyager" };
        fullnames = new string[100];
        random = new Random();
    }

    public string[] getFirstNames()
    {
        return firstnames;
    }

    public string[] getLastNames()
    {
        return lastnames;
    }

    public string[] getFullNames()
    {
        return fullnames;
    }

    public int getRandomIndex(int min, int max)
    {
        int randomnumber = random.Next(min, max);
        return randomnumber;
    }

    public void fillFullNames()
    {
        for(int i = 0; i < fullnames.Length; i++)
        {
            getRandomIndex(0, 10);
            while(fullnames.Contains(firstnames[getRandomIndex(0,10)] + " " + lastnames[getRandomIndex(0,10)]))
                {
                fullnames[i] = firstnames[getRandomIndex(0, 10)] + " " + lastnames[getRandomIndex(0, 10)];
                }
        }
    }

}
}

提前致谢! :)

最佳答案

看起来您只想制作全名的所有组合,那么为什么不这样做呢?

for (int i = 0; i < firstnames.Length; i++)
{
    for (int j = 0; j < lastnames.Length; j++)
    {
        fullnames[i*lastnames.Length + j] = firstnames[i] + " " + lastnames[j];
    }
}

然后,如果您希望您的名字以随机顺序排列,请运行一个随机化名字顺序的方法

如果你想要随机顺序的名字,那么你总是可以做类似下面的事情

string[] firstnames = new string[10] { "Kim", "Allan", "Frank", "Lone", "Line", "Anne", "Per", "Bo", "Grethe", "Mette" };
string[] lastnames = new string[10] { "Pedersen", "Nielsen", "Hansen", "Larsen", "Nygaard", "Harboe", "Bendix", "Højris", "Pilgaard", "Nyager" };
string[] fullnames = new string[100];

List<int> indices = new List<int>();
for (int i = 0; i < firstnames.Length * lastnames.Length; i++)
{
    indices.Add(i);
}

Random random = new Random();
for (int i = 0; i < firstnames.Length; i++)
{
    for (int j = 0; j < lastnames.Length; j++)
    {
        int randomIndex = random.Next(indices.Count() - 1);
        fullnames[indices[randomIndex]] = firstnames[i] + " " + lastnames[j];
        indices.RemoveAt(randomIndex);
    }
}

关于c# - 如何让我的程序生成一个新的随机数,直到它找到一个以前没有使用过的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740126/

相关文章:

c# - Entity Framework 中的 SaveChanges 与 SaveChangesAsync

c# - 打印缩放我的 WPF-GroupBox

c# - 如何在 WPF 中将值从窗口传递到用户控件

c# - IEnumerable OrderBy

c# - 关于 NUnit TestFixtureTeardown 属性

c# - 编译器/运行时如何确定 lambda 表达式的类型?

c# - 无法反序列化 xml 文件

c# - 初始化集合的简洁方法

c# - 在 CompareTo() 覆盖中有效禁用 Sort()?

c# - 如何在 C# 中正确使用 SortedDictionary?