Android Studio Java – как использовать случайный массив без повторения?

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

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));

}

Для неповторения вы можете перетасовать массив сообщений и работать с перетасованным массивом по порядку. Перетасовывайте только после того, как вы использовали все сообщения.

rossum 23.12.2020 13:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете написать логику для получателя сообщений, который удаляет одно сообщение, а в случае, если сообщение недоступно, повторно заполняет:

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

Привет, Тим, большое спасибо, это действительно элегантный способ сделать это!

Areki 24.12.2020 04:29

Другие вопросы по теме