如何获得只能使用一次的随机数?

时间:2019-01-24 15:38:34

标签: c# unity3d

选择随机数后,是否可以只进入第一个if语句一次,然后每隔一次选择该数字就跳过一次?

int Randomizer;
int Random1;
int Random2;

public void RandomButton()
{
    Randomizer = Random.Range(1,3);

    if (Randomizer == 1)
    {
        Random1 = 1;
        Debug.Log("First Value");

        if (Random1 == 1)
        {
            Debug.Log("Nested Value");
        }
    }

    if (Randomizer == 2)
    {
        Debug.Log("Second Value");

        if (Random2 == 2)
        {
            Debug.Log("Nested Value");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

编辑

如果您只想使用一次随机数,则可以将这类信息保存到一个更好的数据结构中,例如HashSet。它具有仅包含唯一数字的属性。您可以利用这种数据结构的性质,因此不必为要收集的每个随机数创建变量。

using System.Collections.Generic

HashSet<int> RandomNumbersUsed = new HashSet<int>();

public void RandomButton()
{
    int randomNumber = Random.Range(1,3);

    if (!RandomNumbersUsed.Contains(randomNumber))
    {
        // Add it to the HashSet so that it cannot be used again
    }
    else
    {
        // Tell the user that the random has been selected before
    }

    if (randomNumber == 1)
    {
        // Do processing when random == 1
    }

    if (randomNumber == 2)
    {
        // Do processing when random == 2
    }

    // Continue adding necessary random numbers
}

原始

您正在寻找if-else块。

if (Random == 1)
{ ... }

else if (Random == 2)
{ ... }

答案 1 :(得分:1)

如果我对您的理解正确,那么您想在第一次选择一个数字时输出一件事,然后在以后每次选择相同的数字时又输出一件事。如果是正确的话,我认为使用现有代码执行此操作的最简单方法是将嵌套Random1语句的else块内的if/else的值分配给检查{ {1}}。这样,您只需分配一次:

Random1

答案 2 :(得分:-2)

对不起,人们误导性问题,但我现在才发现,嘿嘿和平:))我想要实现的是

  int Randomizer;
  int Random1;
  int Random2;

  public void RandomButton()
   {
        Randomizer = Random.Range(1,3);
        if (Randomizer ==1)          
              Random1 += 1;
          if (Random1==1)        
              Debug.Log("Nested Value 1");
          if (Random1==2)
              Debug.Log("Nested Value 2");
   }