Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何每次生成一个随机数,并且没有';t重复_C#_Unity3d - Fatal编程技术网

C# 如何每次生成一个随机数,并且没有';t重复

C# 如何每次生成一个随机数,并且没有';t重复,c#,unity3d,C#,Unity3d,我们正在Unity制作第一款2D手机游戏,我们需要一些帮助。我们使用Java编写代码,但这也是我们第一次编写C# 我们正在做一个纸牌游戏,我们想给每个玩家一个随机数,但(这是对我们来说重要和困难的部分)我们希望每个随机数不要重复。 例如,如果我们有5名玩家,我们想分配一个从5到10的随机数,如果数字6分配给玩家1,那么数字6就不能分配给其他玩家 我们现在的处境是: //Player class only have string name and int trabajo public static

我们正在Unity制作第一款2D手机游戏,我们需要一些帮助。我们使用Java编写代码,但这也是我们第一次编写C#

我们正在做一个纸牌游戏,我们想给每个玩家一个随机数,但(这是对我们来说重要和困难的部分)我们希望每个随机数不要重复。 例如,如果我们有5名玩家,我们想分配一个从5到10的随机数,如果数字6分配给玩家1,那么数字6就不能分配给其他玩家

我们现在的处境是:

//Player class only have string name and int trabajo
public static void assignRandom(Player jug)
{
    int randomnum;
    bool aleatorio;
    do
    {
        randomnum= Random.Range(1, 5);
        aleatorio = comprobarAleatorio(randomnum);
    }
    while (aleatorio);

    jug.setTrabajo(randomnum);
}

public static bool comprobarAleatorio(int numaleatorio)
{
    bool exists = false;
    int longitud = jugadoresList.Count;

    for (int i = 0; i < 5; i++)
    {
        if (jugadoresList[i].getTrabajo().Equals(numaleatorio))
        {
            exists = true;
        }
    }
}
//Player类只有字符串名和int trabajo
公共静态无效随机(玩家壶)
{
int随机数;
布尔阿莱托里奥;
做
{
randomnum=随机范围(1,5);
Aletorio=大脑外动脉(随机数);
}
while(aleatorio);
jug.setTrabajo(随机数);
}
公共静态广播电台(国际广播电台)
{
bool exists=false;
int longitud=jugadoresList.Count;
对于(int i=0;i<5;i++)
{
if(jugadoresList[i].getTrabajo().Equals(numeratorio))
{
存在=真;
}
}
}
然后用int做一个开关,在屏幕上显示你是什么类型的玩家。但很明显,我们做错了什么,因为数字会重复,即使是0(我们不知道怎么做)


我们感谢你的帮助。非常感谢你!(对不起,我们的英文版)

一个解决方案是,您可以生成一个包含有效数字的列表,然后单击

要从中无序排列列表的代码:

//用于生成
//arr[]的随机置换
静态无效随机化(int[]arr,int n)
{ 
//创建对象
//随机类
随机r=新随机();
//从最后一个元素开始,然后
//一个接一个地交换,我们不需要
//运行第一个元素
//这就是为什么我>0
对于(int i=n-1;i>0;i--)
{ 
//选择一个随机索引
//从0到i
int j=r.Next(0,i+1);
//将arr[i]与
//随机索引元素
int temp=arr[i];
arr[i]=arr[j];
arr[j]=温度;
} 
//打印随机数组
对于(int i=0;i
检查以下代码:

public static void assignRandom(Player jug) //Player class only have string name and int trabajo
    {
        int randomnum;
        private Random random = new Random(); //Declared an instance of Random
        ArrayList randomNumsList = new ArrayList();  //Create arraylist to add random nums
        bool aleatorio;
        do
        {
            randomnum= random.next(1, 5); //Changed Random.ranged to random.next();
            randomNumsList.add(randomnum); //add the random num to list
        
            aleatorio = comprobarAleatorio(randomnum);          
        }
        while (aleatorio);

        if (!randomNumsList.Contains(randomnum) {   //Only call setTrabajo if the randomNumsList don't have currently generated randomnum
          jug.setTrabajo(randomnum);
        }
    }

    public static bool comprobarAleatorio(int numaleatorio)
    {

        bool exists = false;
        int longitud = jugadoresList.Count;

        for (int i = 0; i < 5; i++)
        {
                if (jugadoresList[i].getTrabajo().Equals(numaleatorio))
                {             
                    exists = true;             
                }
        }
        return exists;
    }
}
publicstaticvoidassignrandom(Player-jug)//Player类只有字符串名和int-trabajo
{
int随机数;
private Random=new Random();//声明了Random的实例
ArrayList randomNumsList=新建ArrayList();//创建ArrayList以添加随机NUM
布尔阿莱托里奥;
做
{
randomnum=random.next(1,5);//将random.ranged更改为random.next();
randomNumsList.add(randomnum);//将随机数添加到列表中
Aletorio=大脑外动脉(随机数);
}
while(aleatorio);
如果(!randomNumsList.Contains(randomnum){//仅当randomNumsList当前没有生成randomnum时调用setTrabajo
jug.setTrabajo(随机数);
}
}
公共静态广播电台(国际广播电台)
{
bool exists=false;
int longitud=jugadoresList.Count;
对于(int i=0;i<5;i++)
{
if(jugadoresList[i].getTrabajo().Equals(numeratorio))
{             
存在=真;
}
}
回报存在;
}
}

告诉我它是否有用。

用你想要处理的数字创建一个数组,然后选择一个随机数组条目,使用该数组元素并删除该元素,或者多次交换数组元素并依次处理数字。我认为你应该做一个宾果游戏教程。了解如何生成随机卡以及如何以随机顺序绘制宾果球。非常感谢!现在它不会崩溃,但指定的值始终为0。你知道如何修复它吗?我已更新了代码。我已将random.range更改为random.next。检查它是否工作并通知我。如果它也不工作,请尝试输出randomnum的值,以检查它是否输出值。检查random.range和random.next两种情况。欢迎随时使用。