我试图从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);
}
答案 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中输出唯一字母,则需要修改方法。