我正在用android studio开发一个应用。
我想做一个“随机”功能。这就是在Java中的样子:
final String[] lesquestions = {"random1", "random2", "random3"};
b_question.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int rando_questions = (int) (Math.random() * 3);
question.setText(lesquestions[rando_questions]);
}
});
它工作正常,但我希望在出现字符串时将其从列表中删除,因此不会出现两次。
编辑:更准确地说:随机数是问题,我希望问题仅出现一次,不能重复。
答案 0 :(得分:1)
首先,使用Java列表而不是数组,因此管理它会更加舒适,然后执行以下操作:
final List<String> lesquestions = new ArrayList<>(Arrays.asList("random1", "random2", "random3"));
b_question.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int rando_questions = (int) (Math.random() * lesquestions.size());
question.setText(lesquestions.remove(rando_questions));
}
});
答案 1 :(得分:1)
cstdlib
要选择一个新的随机问题,可以删除随机选择的项目,但不能从固定大小的数组中删除,而是从集合中删除final List<String> lesquestions = newArrayList<>();
Collections.addAll(lesquestions, "random1", "random2", "random3");
b_question.setOnClickListener(new View.OnClickListener() {
Random random = new Random();
@Override
public void onClick(View view) {
if (lesquestions.isEmpty()) {
question.setText("Fini");
return;
}
int questionIndex = random.nextInt(lesquestions.size());
question.setText(lesquestions.remove(questionIndex));
}
});
(如果问题必须唯一,
或Set<String>
,如果您想再次提问的话。
List<String>
会将一个数组/字符串枚举转换为List,并由该数组支持,因此固定大小。因此,当一个人想要移除时就不能使用。Arrays.asList
的环境要好一点,但Math.random
则更清晰:值0、1、2,...,n-1。nextInt(int n)
返回删除的元素,因此它同时用作吸气剂。好的机会。