2011-09-19 9 views
3

J'utilise 9 vues d'images Je veux définir les images en imageview aléatoirement, quand je clique sur le bouton d'actualisation, mais j'ai essayé comme ceci il travaille pour l'allocation aléatoire des images mais il répète la même image dans deux (ou) trois vues d'image à un temps. où est le problème dans mon code ..Comment définir des images aléatoires pour ImageView?

final int[] imageViews = { 
      R.id.imgview11, R.id.imgview12, R.id.imgview13, 
      R.id.imgview21, R.id.imgview22, R.id.imgview23, 
      R.id.imgview31, R.id.imgview32, R.id.imgview33 }; 

    final int[] images = { 
      R.drawable.i1, R.drawable.i2, R.drawable.i3, 
      R.drawable.i4, R.drawable.i5, R.drawable.i6, 
      R.drawable.i7, R.drawable.i8, R.drawable.empty }; 

    final ImageButton shuffle = (ImageButton) findViewById(R.id.new_puzzle); 
    shuffle.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) {   
      Random generator = new Random(); 
      //int n = 9; 
      //n = generator.nextInt(n); 
      //Random random = new Random(System.currentTimeMillis()); 
      for(int v : imageViews) { 
       ImageView iv = (ImageView)findViewById(v); 
       iv.setImageResource(images[generator.nextInt(images.length - 1)]); 
      } 
     } 
    });  

je ne veux pas répéter, une image pour une imageview seulement ..

+0

Je ne comprends pas comment utiliser mon exigence. –

Répondre

6

utilisant le poste de blessenm, j'ai écrit un code similaire que vous avez besoin. vérifiez si cela vous aide.

shuffle.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 

      Random rng = new Random(); 
      List<Integer> generated = new ArrayList<Integer>(); 
      for (int i = 0; i < 9; i++) 
      { 
       while(true) 
       { 
       Integer next = rng.nextInt(9) ; 
       if (!generated.contains(next)) 
       { 
        generated.add(next); 
        ImageView iv = (ImageView)findViewById(imageViews[i]); 
        iv.setImageResource(images[next]); 
        break; 
       } 
       } 
      } 
      } 
     }); 
+0

ça marche bien .. merci .. –

+0

S'il vous plaît, cette boucle n'est pas née, vous cherchez des numéros de randoms jusqu'à ce que vous obtenez tous les numéros de 1 à 9! C'est comme lancer un dé jusqu'à ce que vous obteniez tous les nombres de 1 à 6! Parfois, vous aurez besoin de 6 essais, mais la plupart du temps, vous aurez besoin de 10, 15 ou 20 essais! Vous allez certainement perdre la batterie du téléphone en informatique inutile! S'il vous plaît envisager d'utiliser ma première solution et ne pas gaspiller CPU sur votre application s'il vous plaît, vous avez de la chance que vous avez besoin de seulement 9 numéros aléatoires, imaginez que vous avez besoin de 1000, votre téléphone va simplement mourir. –

+1

En outre, vous avez oublié "generated.add (next);" dans ta boucle! Le code ne peut pas fonctionner! S'il vous plaît envisager de lire cette réponse: http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates –

1

Peut-être pas la réponse parfaite, mais je voudrais juste mélanger la liste d'images et de définir l'image résultante à l'imageview. Cela évitera d'avoir à générer des nombres aléatoires qui vont bien sûr créer des doublons (Si vous lancez un dé 6 fois, vous n'aurez pas les numéros 1,2,3,4,5,6 dans un ordre aléatoire, vous obtiendra plusieurs fois le même nombre.)

Veuillez cocher tout ce qui inclut le 'i' car je ne suis pas devant mon ordinateur.

List<int> list = Arrays.asList(images); 
// Here we just simply used the shuffle method of Collections class 
// to shuffle out defined array. 
Collections.shuffle(list); 

int i=0; 
// Run the code again and again, then you'll see how simple we do shuffling 
for (int picture: list) { 
    ImageView iv = (ImageView)findViewById(imageViews[i]); 
    iv.setImageResource(picture); 
    i++; 
} 

comme alternative, vous pouvez également vouloir mélanger votre liste avec ce code:

public class ShuffleArray { 
    public static void shuffleArray(int[] a) { 
     int n = a.length; 
     Random random = new Random(); 
     random.nextInt(); 
     for (int i = 0; i < n; i++) { 
      int change = i + random.nextInt(n - i); 
      swap(a, i, change); 
     } 
    } 

    private static void swap(int[] a, int i, int change) { 
     int helper = a[i]; 
     a[i] = a[change]; 
     a[change] = helper; 
    } 

    public static void main(String[] args) { 
     int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7 }; 
     shuffleArray(a); 
     for (int i : a) { 
      System.out.println(i); 
     } 
    } 
} 
Questions connexes