java - 无法避免在 do while 中生成相同的随机数

标签 java android

我有这个包含一些字符串的数组:

String[] funnyRiddles = { "1", "2", "3", "4" };

现在我正在尝试生成一个随机数并显示上述数组的内容(funnyRiddles[rand]),但我想在显示所有值后停止生成随机数funnyRiddles 数组的代码如下:

Random rnd = new Random();
int randomRiddle = 0;
int clickCounter = 0;
static ArrayList<Integer> passedQuestions = new ArrayList<Integer>();
final RiddlesHolder riddles = (RiddlesHolder) getActivity().getApplication();
askBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (txtAnswer.getText().toString().equals(riddles.getFunnyRiddlesAnswerByPos(randomRiddle))) {
            passedQuestions.add(randomRiddle);
            do {
                if (clickCounter <= passedQuestions.size()) {
                    randomRiddle = rnd.nextInt(riddles.getFunnyRiddles().length);
                    clickCounter++;
                } else {
                    Toast.makeText(getActivity().getApplication(),
                            "No more riddles!", Toast.LENGTH_SHORT).show();
                    //clickCounter++;
                    break;
                }
            } while (passedQuestions.contains(randomRiddle));

            TextView text = (TextView) getActivity().findViewById(R.id.txtAnimalRiddle);
            text.setText(riddles.getFunnyRiddlesByPos(randomRiddle));
            /*Toast.makeText(getActivity().getApplication(),
                    riddles.getFunnyRiddlesByPos(randomRiddle), Toast.LENGTH_SHORT).show();*/
        } else {
            Toast.makeText(getActivity().getApplication(),
                    "Wrong answer!", Toast.LENGTH_SHORT).show();
        }
    }
});

现在每 1-2 次点击就会出现提示 no mo riddles 的 toast 。它应该在没有更多唯一值时显示。 我知道我在这里缺少一些逻辑,但我找不到正确的方法。上面的代码可能是无用的废话,但这就是我到目前为止的结果。

最佳答案

如果我对你的问题的理解正确,你想以随机顺序显示谜语。但是您正在做的是显示列表中的四个随机谜语,这很可能导致至少一个谜语被显示不止一次。

如果这个解释是正确的,最简单的解决方案可能是生成一个 random permutation谜语数组,然后按该顺序显示它们。

关于java - 无法避免在 do while 中生成相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489518/

相关文章:

android - 更新通知文本,而不是整个通知

java - Android Studio : How can I load url in WebView on fragment by clicking a button on the same fragment

java - 如何将 antdirset 与 Ear 任务一起使用?

java - 如何防止 Jtable 和 MYSQL(数据库)中的重复条目?

java - 在spring mvc中如何在 Controller 中获取上下文路径

java - 如何制作一个不干扰Activity的正在运行的服务?

android - RSRuntimeException : Loading of ScriptC script failed (build tools 19. 0.2)

java - 热 Observables 的 RxJava 延迟

java - HashMap 分组方式 (Java)

android - 在摩托罗拉手机上运行 ndk-gdb 时找不到包错误