Android Studio Java - 如何使用随机数组而不重复?

Posted

技术标签:

【中文标题】Android Studio Java - 如何使用随机数组而不重复?【英文标题】:Android Studio Java - How do I use a random array without repeating? 【发布时间】:2021-04-01 17:11:05 【问题描述】:

我有一组随机消息,但我希望它不会选择已被选择的消息,然后在所有消息都被选择后重置。

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】:

您可以为删除一条消息的消息获取器编写逻辑,并在没有消息可用的情况下重新填充:

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

【讨论】:

嗨蒂姆,非常感谢,这实际上是一种优雅的方式!

以上是关于Android Studio Java - 如何使用随机数组而不重复?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android Studio中使图像中的特定颜色透明?

如何使旧的 Eclipse 项目在带有 Gradle 的 Android Studio 上运行? [关闭]

如何使新插入的行位于 ListView 之上(Android Studio)

如何在 Android Studio 中对动作运行 SoundPool

如何在 Android Studio 中查找使当前打开的布局文件膨胀的 Activity 或 Fragment

如何使回车键将光标移动到 Android Studio 中的行尾,就像在 Eclipse 中一样