1

I've got an array of random messages, but I want it so that it doesn't pick a message that has already been picked and then reset once all messages have been picked.

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

}
1
  • For non-repetition you could shuffle the message array and work through the shuffled array in order. Only reshuffle when you have used all the messages. Commented Dec 23, 2020 at 12:53

1 Answer 1

4

You could write logic for the message getter which removes one message, and in the event that no message be available, repopulates:

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);
}
Sign up to request clarification or add additional context in comments.

1 Comment

Hi Tim, thanks a lot, this is actually an elegant way of doing it!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.