生成唯一随机数JAVA

时间:2015-03-02 17:58:28

标签: java android

我试图从String Question中获取随机字符。但这个角色重复了。

随机方法

public ArrayList<Integer> Random(int length) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i=0; i<length; i++) {
            list.add(new Integer(i));
        }
        Collections.shuffle(list);
        return list;
    }

MainActivity

    strQuestion = c.getString("question");
    int length = strQuestion.length();
    str_buff.getChars(0, length, char_text, 0);

 for(int i=0;i<length;i++){
            int k = Random(length).get(i);
                TextView tv = new TextView(this);
                tv.setText(String.valueOf(char_text[k]));
                tv.setId(k);
                tv.setTextSize(30);
                tv.setBackgroundColor(0xff00ff00);
                tv.setPadding(5, 5, 5, 5);
                tv.setOnTouchListener(new MyTouchListener());
                layout.addView(tv);
        }

2 个答案:

答案 0 :(得分:4)

您在for循环的每次迭代中使用不同的shuffle。给定元素通常会出现在不同shuffle中的不同位置,因此您可以多次看到它。

在循环外创建一个混洗列表。

答案 1 :(得分:0)

如果我正确理解您的要求,您需要为字符串中的每个字母创建一个新的TextView&#34;问题&#34;但是你想要它们是以随机顺序创建的吗?

你现在所写的内容创造了一个新的&#34;随机&#34;对于MainActivity中for循环的每次迭代,ArrayList。我想你想把你的调用移到for循环之外的Random(长度)。 MainActivity中的for循环看起来应该是这样的......

ArrayList<Integer> randomized = Random(length);
for(int i=0;i<length;i++){
            int k = randomized.get(i);
                TextView tv = new TextView(this);
                tv.setText(String.valueOf(char_text[k]));
                tv.setId(k);
                tv.setTextSize(30);
                tv.setBackgroundColor(0xff00ff00);
                tv.setPadding(5, 5, 5, 5);
                tv.setOnTouchListener(new MyTouchListener());
                layout.addView(tv);
        }

注意:如果分配给strQuestion的字符串中包含重复的字母(例如&#34; banana&#34;),如果您只想在TextView中输出唯一字母,则需要修改方法。