请帮我随机,没有重复元素。

时间:2014-03-22 11:01:16

标签: java html random

以下代码通过重复相同的元素运行, 我想要的是随机发送而不重复。

public class khmerAlphabetExercise extends Activity {

    AlphabetData data;
    MediaPlayer mp;
    int dataType;
    int dataKey;    
    Random random;
    private ImageView iv1, iv2, iv3,iv4;
    private ImageView[] imgs = { iv1, iv3, iv3,iv4 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_khmer_exercise);       

        int[] imageViews={R.id.ex_con1,R.id.ex_con2,R.id.ex_con3,R.id.ex_con4};
        //int images[]={R.drawable.con_ex_01,R.drawable.con_ex_02,R.drawable.con_ex_03,R.drawable.con_ex_04,R.drawable.con_ex_05,R.drawable.con_ex_06,R.drawable.con_ex_07,R.drawable.con_ex_08,R.drawable.con_ex_09,R.drawable.con_ex_10};
        int[] images={data.getImageId()};
        random = new Random(System.currentTimeMillis());

        for(int v : imageViews)     
        {
            ImageView iv = (ImageView)findViewById(v);
            iv.setImageResource(images[random.nextInt(images.length)]);                
        }   
    }
}

2 个答案:

答案 0 :(得分:0)

您可以保留要选择的图像的计数器。每次你选择一个,你都会在原始数组中交换它,最后一个未被选中。

因此,例如,您有一个数组{0,1,2,3,4}。未选中的长度为5,我们称之为 l

  1. 在0和 l-1
  2. 之间选择一个随机数 n
  3. 您的新元素是 n 的元素。
  4. n 处的元素与 l-1 处的元素交换,将1减去 l 并返回 1 如果l大于0.如果l == 0 ,请转到第4点
  5. 你完成了

答案 1 :(得分:0)

您可以使用Collections.shuffle

Collections.shuffle(Arrays.asList(images));

然后您可以使用简单的for循环逐个添加此图像,而无需随机化位置。在您的示例中,BTW只包含一个元素..