【问题标题】:Android random non repeating stringAndroid随机非重复字符串
【发布时间】:2011-12-08 14:29:21
【问题描述】:

我正在制作宾果游戏。我有一个 5x5 的图像按钮网格,每个都有自己的文本视图。当应用程序启动或重置时,我希望每个 textview 显示一个随机字符串,而在游戏期间没有任何一个字符串显示两次。我目前在资源数组中有字符串,有 127 项:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="tile_text">
    <item>String 1</item>
    <item>String 2</item>
    <item>String 3</item>
    ...all the way to String 127
</string-array>
</resources>

并在每个文本视图上显示一个随机字符串:

public String[] myString;

Resources res = getResources();
myString = res.getStringArray(R.array.tile_text);

Random random = new Random(System.currentTimeMillis());

int[] textViews = {

//I have all my textviews added to this array
};

for(int v : textViews) {
        TextView tv = (TextView)findViewById(v);

        tv.setText(myString[random.nextInt(myString.length)]);          
}

上面的效果很好,但是即使数组中有 200 个字符串可供选择,有些项目仍然会显示两次。有没有一种方法可以让数组随机播放,而不是为每场比赛选择两次相同的字符串?我已经搜索并找到了有关随机字符串的信息,但没有关于非重复随机字符串的信息,所以如果这是一个重复的问题,我们深表歉意。

【问题讨论】:

    标签: android string random


    【解决方案1】:

    我会保留一份您已添加的字符串的列表,然后继续挑选新的随机字符串,直到您找到一个不在列表中的字符串。

    类似这样的:

    Vector<String> alreadyUsed = new Vector<String>();
    
    for(int v : textViews) {
        TextView tv = (TextView)findViewById(v);
    
        String nextString;
        do {
            nextString = myString[random.nextInt(myString.length)];                
        } while (alreadyUsed.contains(nextString));
        alreadyUsed.add(nextString);
    
        tv.setText(nextString);          
    }
    

    【讨论】:

    • 谢谢,正是我想要的!我还在 for 循环之外添加了 alreadyUsed.clear(),这样它就可以在每个新游戏中再次从所有字符串中进行选择,但它不会在每个游戏中多次添加相同的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多