У меня есть массив случайных сообщений, но я хочу, чтобы он не выбирал сообщение, которое уже было выбрано, а затем сбрасывался после выбора всех сообщений.
public void showRandomMsg(){
shuffleMsg();
answer1.setText((messageArray[0].getmAns()));
message2.setText((messageArray[0].getmMsg()));
toyView1.setImageResource(messageArray[0].getmImage());
}
Messages m01 = new Messages(R.drawable.crown1, "Mesage 0 A","Message 0 B");
Messages m02 = new Messages(R.drawable.crown2,"Mesage 1 A","Message 1 B");
Messages m03 = new Messages(R.drawable.crown3,"Mesage 2 A","Message 2 B");
Messages m04 = new Messages(R.drawable.crown4,"Mesage 3 A","Message 3 B");
Messages m05 = new Messages(R.drawable.crown5,"Mesage 4 A","Message 4 B");
Messages [] messageArray=new Messages[]{
m01, m02, m03, m04, m05
};
public void shuffleMsg(){
Collections.shuffle(Arrays.asList(messageArray));
}
Вы можете написать логику для получателя сообщений, который удаляет одно сообщение, а в случае, если сообщение недоступно, повторно заполняет:
List<Messages> messageList;
public void showRandomMsg(){
if (Objects.isNull(messageList) || messageList.size() == 0) {
refillMsg();
}
answer1.setText(messageList.remove(0).getmAns());
message2.setText(messageList.remove(0).getmMsg());
toyView1.setImageResource(messageList.remove(0).getmImage());
}
public void refillMsg() {
messageList = Arrays.asList(new Messages[] {
m01, m02, m03, m04, m05
});
Collections.shuffle(messageList);
}
Привет, Тим, большое спасибо, это действительно элегантный способ сделать это!
Для неповторения вы можете перетасовать массив сообщений и работать с перетасованным массивом по порядку. Перетасовывайте только после того, как вы использовали все сообщения.