2011-09-19 49 views
3

我使用9图像视图就是我想要一套图像ImageView的随机,当我点击刷新按钮,但我想这样它的工作对图像的随机分配,但它的重复两个相同的图像(或)三大的ImageView在时间。哪里是我的代码问题..如何将随机图像设置为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)]); 
      } 
     } 
    });  

我不想重复,只有一个ImageView的一个形象..

+0

我没有得到如何使用我的要求。 –

回答

6

,我写道,你需要一个类似的代码。检查这是否有助于你。

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

它的工作不错..感谢ü.. –

+0

请,这个循环是不是重生,你正在寻找随机量数字,直到你获得的所有号码从1到9!这就像掷骰子,直到你得到1到6的所有数字!有时候,你需要6次尝试,但大部分时间,你需要10,15或20次尝试! 您肯定会浪费无用的计算手机的电池!请考虑使用我的第一个解决方案,不要浪费你的应用程序的CPU,你很幸运,你只需要9个随机数字,想象你需要1.000,你的手机就会死亡。 –

+1

另外,您忘记了“generated.add(next);”在你的循环中!该代码无法工作!请考虑阅读这样的回答:http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates –

1

也许不是完美的答案来产生随机数,但我只想洗牌的图像列表和所产生的图像设置为ImageView的。

这将避免产生,当然,这将创建重复的(如果你扔骰子6次随机数,你会不会以随机顺序1,2,3,4,5,6的数字,你会得到多个时间相同的号码。)

请检查一切,包括“我”,因为我在我的电脑前我不是。

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++; 
} 

作为替代,您可能还希望使用此代码随机播放列表:使用blessenm职务

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); 
     } 
    } 
} 
相关问题