1
votes

Comment puis-je obtenir un nombre aléatoire à n'utiliser qu'une seule fois?

Une fois qu'un nombre aléatoire a été sélectionné, est-il possible d'accéder à la première instruction if une seule fois et de l'ignorer toutes les deux fois que ce numéro est sélectionné?

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");
        }
    }
}


6 commentaires

Ce que vous essayez de faire n'est pas clair.


Pourquoi? Qu'essayez-vous de réaliser?


Pouvez-vous formater un peu mieux votre code, afin que les lignes soient mieux alignées verticalement?


Ce que je veux dire, c'est que la "première valeur" est supprimée après la première utilisation et la deuxième utilisation, elle utilisera uniquement la "valeur imbriquée" au hasard == 1 au lieu de "première valeur" :))


Il semble que vous n'ayez jamais défini Random2 sur quoi que ce soit. Et dans le premier cas, vous définissez Random1 = 1 juste avant de vérifier cette condition, donc elle sera toujours true .


ops désolé mauvais commentaire hehe je voulais dire dans randomizer == 1 il utilisera "First Value" et après cela randomizer == 1 à nouveau au lieu de "First Value" il utilisera seulement "Nested Value" pas la "First Value" à nouveau


3 Réponses :


1
votes

Modifier

Si vous ne souhaitez utiliser un nombre aléatoire qu'une seule fois, je sauvegarderais ce type d'informations dans une meilleure structure de données comme un HashSet . Cela a la propriété de ne contenir que des nombres uniques. Vous pouvez utiliser la nature de cette structure de données pour ne pas avoir à créer de variables pour chaque nombre aléatoire que vous souhaitez collecter.

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

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

Original

Vous recherchez Bloc if-else .

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
}

0 commentaires

-2
votes

Ops désolé les gars pour la question trompeuse, mais j'ai découvert tout à l'heure hehe peace :)) ce que je veux réaliser est que

  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");
   }


0 commentaires

1
votes

Si je vous comprends bien, vous voulez afficher une chose la première fois qu'un nombre est choisi, et autre chose pour chaque fois que le même nombre est choisi. Si c'est correct, je pense que le moyen le plus simple de le faire en utilisant votre code existant est d'attribuer la valeur de Random1 à l'intérieur du bloc else d'un if / else imbriqué instruction qui vérifie la valeur de Random1 . De cette façon, vous ne l'attribuez qu'une seule fois:

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

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

    // Repeat the same pattern for the other number here...
}


0 commentaires