随机,但每个只能出现一次

时间:2018-09-21 14:01:12

标签: java random

我正在用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]);
    }
});

它工作正常,但我希望在出现字符串时将其从列表中删除,因此不会出现两次。

编辑:更准确地说:随机数是问题,我希望问题仅出现一次,不能重复。

2 个答案:

答案 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)返回删除的元素,因此它同时用作吸气剂。
  • 一次都没有问题了。

好的机会。