我在stackoverflow上使用了这个问题来创建一个没有问题的随机字符串:D (Show random string)
有时会出现相同的字符串,这很烦人。
所以我希望字符串每个会话只显示一次,我已经有一个Quit Session按钮来杀死这个类。所以我可以说我有1-3的数字。数字2首先显示,然后是1,因为只剩下一个数字,只能显示3个。
我的按钮代码为“下一个按钮”。目前它杀死了课程并重新开始!如何更改它以便只显示一个新字符串?
private void onButtonClick(Button clickedButton) {
Intent startIntent = null;
if (clickedButton.getId() == R.id.quit) {
startIntent = new Intent(this, mainmenu.class);
finish();
}
else if (clickedButton.getId() == R.id.next) {
startIntent = new Intent(this, play.class);
startActivity(startIntent);
finish();
}
if (startIntent != null) {
startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(startIntent, 0);
}
}
private void setupbutton() {
View.OnClickListener onClickHandler = new View.OnClickListener() {
public void onClick(View v) {
onButtonClick((Button)v);
}
};
Button button = (Button)findViewById(R.id.quit);
button.setOnClickListener(onClickHandler);
button = (Button)findViewById(R.id.next);
button.setOnClickListener(onClickHandler);
答案 0 :(得分:0)
对索引进行随机排列,然后使用它来选择序列中的下一个字符串。
答案 1 :(得分:0)
出现相同的字符串,因为随机数生成器生成随机数!它可以连续多次生成相同的数字。
有两种可能性,名称为:
将所有字符串放入数组并随机播放。然后从索引1开始逐个取出元素:
List strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));
Collections.shuffle(list);
将所有字符串放入数组中,选择具有随机索引的字符串并删除字符串:
Random rgenerator = new Random();
ArrayList<String> strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));
int index = rgenerator.nextInt(strings.size());
String randomString = strings.get(index);
strings.remove(index);
编辑: 好的,我明白了......
您必须记住哪些字符串尚未使用过。将字符串存储在List中并使列表保持静态,这样您就可以在创建活动play
的不同实例之间保存状态:
private static ArrayList<String> myString;
然后稍微更改一下构造函数:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play);
setupbutton();
if (myString == null || myString.size() == 0) {
Resources res = getResources();
myString = new ArrayList(Arrays.asList(res.getStringArray(R.array.myArray)));
}
// get a random string
int rand = rgenerator.nextInt(myString.size());
String q = myString.get(rand);
// remove the last used string from the list
myString.remove(rand);
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
}