Пожалуйста, помогите мне случайным образом без повторения элемента.

0

Этот ниже код был запущен повторением одних и тех же элементов, и я хочу, чтобы это было случайным без повторения.

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)]);                
        }   
    }
}
Теги:
random

2 ответа

0

Вы можете использовать Collections.shuffle

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

то вы можете просто добавить эти изображения один за другим, используя простой цикл без рандомизации позиций. BTW в ваших примерах изображений содержит только один элемент.

  • 0
    Спасибо за вашу помощь
0

Вы можете сохранить счетчик оставшихся изображений для выбора. И каждый раз, когда вы выбираете один, вы меняете его в исходном массиве с последним невыбранным.

Так, например, у вас есть массив {0,1,2,3,4}. Длина невыбранного значения будет равна 5, назовем ее l

  1. Выберите случайное число n между 0 и l-1
  2. Ваш новый элемент - это элемент в n.
  3. Поменяйте элемент на n с элементом на l-1, выложите один в l и вернитесь к пункту 1, если l больше 0. Перейдите к пункту 4, если l == 0.
  4. Ты заканчиваешь
  • 0
    Спасибо за вашу помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню