IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Aide sur une fonction Random()


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut Aide sur une fonction Random()
    Bonjour,

    J'aurais besoin d'une aide concernant l'implémentation de la fonction Random(). La page : http://developer.android.com/referen...il/Random.html N'est pas très explicite et je cherche un exemple "bas niveau" pour ensuite implémenter une monter en compétence.

    Donc pour une application que je travail, j'aurais besoin d'avoir un affichage différent de façon random. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		    ((Button)findViewById(R.id.buttonRouge)).setOnClickListener(new OnClickListener() {
    	        	public void onClick(View v) {
    	        String words = "rouge";
    	        speakWords(words);
    	        	}
    	        });
        ((Button)findViewById(R.id.buttonBleu)).setOnClickListener(new OnClickListener() {
    	        	public void onClick(View v) {
    	        String words = "bleu";
    	        speakWords(words);
    	        	}
    	        });
    J'aimerais que parfois ce soit le bouton "Rouge" qui s'affiche et parfois le bouton "Bleu" . Mais je me demande si il ne faille pas que je fasse un XML par affichage ? (pour l'instant il sont tout les deux sur le même second.xml.)

    Pour la déclaration je pense qu'elle doit être du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final Random RANDOM = new Random();
    Voir éventuellement faire un Switch(id) et dans les Case faire mes actions ? (Mais je crois que les switch sont bons que pour les onclicklisteners ..)

    Je me demande aussi si ma demande ne serait pas aussi une demande sur un IHM ?

    Donc pour récapituler j'aimerais de façon aléatoire avoir une vue différentes avec les actions associés.
    Dans mon cas simple : Une fois un bouton 'bleu' cliquable , une fois un bouton 'rouge' cliquable (avec les actions induite sur chaque bouton).

    Cordialement,

  2. #2
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Il te suffit, de manière aléatoire, de cacher l'un des deux boutons. Donc, moi, j'ajouterai le code suivant dans le onCreate, après celui de ton extrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      if (RANDOM.nextBoolean()) {
        ((Button)findViewById(R.id.boutonBleu)).setVisibility(View.GONE);
      }
      else {
        ((Button)findViewById(R.id.boutonRouge)).setVisibility(View.GONE);
      }

  3. #3
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    N'est pas très explicite et je cherche un exemple "bas niveau" pour ensuite implémenter une monter en compétence.
    http://developer.android.com/referen...l#nextInt(int)

    Euh il suffit juste de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private Random RANDOM = new Random();
    private static int BLUE = 0;
    private static int RED = 1;
     
    int rand = RANDOM.nextInt(2);
    switch(rand) {
      case BLUE:
      break;
      case RED:
      break;
    };
    Non ?

    Edit : devancé .

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Oulala ... ok autant pour moi .. !

    Du coup je complète la réponse pour qu'elle soit fonctionnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private Random RANDOM = new Random();
    /*....*/
    boolean isPlus = RANDOM.nextBoolean();
    		    if (isPlus) {
       ((Button)findViewById(R.id.buttonBleu)).setVisibility(View.GONE);
    		      }
    		      else {
    ((Button)findViewById(R.id.buttonRouge)).setVisibility(View.GONE);
    		      }
    Merci de la réponse en tout cas, rapide et efficace

    A noter que le Booléen est bon que dans le cas de deux choses comme moi sinon un Int est surement le mieux placé.
    Edit : pour le NextInt voila la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private Random RANDOM = new Random();
    /*...*/
    int rand = RANDOM.nextInt(3);
    		    switch(rand) {
    		      case 1 : { ((Button)findViewById(R.id.buttonBleu)).setVisibility(View.GONE); }
    		      break;
    		      case 2 : { ((Button)findViewById(R.id.buttonRouge)).setVisibility(View.GONE); }
    		      break;
    		    };

    Cordialement,

  5. #5
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Non, pas d'accord pour ta solution basée sur nextInt, il fallait prendre la proposition de Feanorin. nextInt retourne potentiellement une valeur entre 0 et n-1, donc dans ton cas, les valeurs possiblement retournées seront 0, 1 et 2. Avec un switch qui ne prend en compte que 1 et 2, dans 1/3 des cas, tu auras les deux boutons visibles. De plus, si tu ne veux que un seul bouton visible parmi n, il faudrait d'abord tous les cacher, puis n'en réafficher qu'un seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
      bouton0.setVisibility(View.GONE);
      bouton1.setVisibility(View.GONE);
      ...
      // et ainsi de suite jusqu'au n-1 bouton
     
      int rand = RANDOM.nextInt(N);
      switch(rand) {
        case 0: bouton0.setVisibility(View.VISIBLE);
            break;
        case 1: bouton1.setVisibility(View.VISIBLE);
            break;
        ...
        // et ainsi de suite jusqu'au n-1 bouton
      }

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Merci de ton intervention.

    Avec un switch qui ne prend en compte que 1 et 2, dans 1/3 des cas, tu auras les deux boutons visibles.
    J'ai fait les tests et je dois dire que à aucun moment je n'est eu les deux boutons à s'afficher.
    Mais ton architecture d'écriture est correct et plus propre et dans mon cas va être intéressent dans la monter en nombre de bouton.

    Donc petite mise à jour de la solution que j'ai adopté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		    ((Button)findViewById(R.id.buttonBleu)).setVisibility(View.GONE);
    		    ((Button)findViewById(R.id.buttonRouge)).setVisibility(View.GONE);
     
    		    int rand = RANDOM.nextInt(2);
    		    switch(rand) {
    		      case 0 : { ((Button)findViewById(R.id.buttonBleu)).setVisibility(View.VISIBLE); }
    		      break;
    		      case 1 : { ((Button)findViewById(R.id.buttonRouge)).setVisibility(View.VISIBLE); }
    		      break;
    		    };
    Sachant que dans mon cas les boutons sont superposés cela ne portais pas a incident mais j'adopte quand même cette écriture et je t'en remercie pour ta remarque constructive !

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide sur une fonction excel
    Par vanessb dans le forum Excel
    Réponses: 9
    Dernier message: 27/11/2008, 10h11
  2. aide sur une fonction
    Par haymen dans le forum C#
    Réponses: 7
    Dernier message: 11/09/2008, 22h14
  3. Aide sur une fonction sous Visual C++ .NET
    Par mog83 dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 15h17
  4. Aide sur une fonction / pbm de manipulation de caractère
    Par captainamerica75 dans le forum Access
    Réponses: 3
    Dernier message: 16/02/2006, 11h54
  5. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo