java - 使用 LinkedHashSet 存储随机数但有重复

标签 java android arraylist set linkedhashset

我有一个生成随机算术表达式的应用程序。然后,它会在随机位置 (tag) 生成一个正确答案,并随后生成三个错误答案,供用户选择。

我最初选择了一个 ArrayList但它提供重复项。然后我转换了 ArrayList for loop 中的内容到 Set它仍然产生重复。然后我更改了初始 ArrayListLinkedHashSet唉,仍然重复。我想这可能是我的 for loop 中的位置但我试过摆弄位置,我要么遇到重复,要么 Index问题。

我不想使用 Java 8的:List<String> deDupStringList3 = strList.stream().distinct().collect(Collectors.toList());因为它是API/Version具体的。

For Loop代码:

    List<Integer> answers = new ArrayList<>(new HashSet<Integer>(5));
    answers.clear();

    int incorrectAnswer;

    for (int i = 0; i < 4; i++) {
            if (i == locCorrectAnswer) {
                answers.add(value);
            } else {
                if (operator == '+') {
                    incorrectAnswer = value + rand.nextInt(10) + 1;
                } else {
                    incorrectAnswer = value - rand.nextInt(10) + 1;
                }
                while (incorrectAnswer == value) {
                    if (operator == '+') {
                        incorrectAnswer = value + rand.nextInt(10) + 1;
                    } else {
                        incorrectAnswer = value - rand.nextInt(10) + 1;
                    }
                }
                answers.add(incorrectAnswer);
            }
    }

For Loop代码(使用 ArrayList 并转换为 Set ):

    ArrayList <Integer> answers;
    Set<Integer> s = new LinkedHashSet<>(answers);

    int incorrectAnswer;

    for (int i = 0; i < 4; i++) {
            if (i == locCorrectAnswer) {
                answers.add(value);
            } else {
                if (operator == '+') {
                    incorrectAnswer = value + rand.nextInt(10) + 1;
                } else {
                    incorrectAnswer = value - rand.nextInt(10) + 1;
                }
                while (incorrectAnswer == value) {
                    if (operator == '+') {
                        incorrectAnswer = value + rand.nextInt(10) + 1;
                    } else {
                        incorrectAnswer = value - rand.nextInt(10) + 1;
                    }
                }
                answers.add(incorrectAnswer);
            }
            s.addAll(answers);
            answers.clear();
            answers.addAll(s);
    }

我确定这是一个简单的错误,但我看不到它。

最佳答案

您也可以尝试以下方法。

Set<Integer> s = new HashSet<>();
//correct value
s.add(value);
while (s.size() < 4)
{
    //incorrect value
    s.add( value + rand.nextInt(10) + 1);
}
List<Integer> answers = new ArrayList<>(s);
//shuffle
Collections.shuffle(answers);

关于java - 使用 LinkedHashSet 存储随机数但有重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057810/

相关文章:

java - Java中的序列化顺序

Android - 基于 ORM 的数据库库,可在运行时动态创建表

java - 定义未知类型对象的数组并在构造函数中分配正确类型的对象

java - 在 ArrayList 中查找对象索引的有效方法

android - TextSwitcher NullPointer 错误

java - 在 MapReduce 中,如何将数组列表作为值从映射器发送到 reducer

java - 重构遗留代码——接口(interface)实现java——使用非接口(interface)方法

java - 在 Java 中比较 String 和 null 所花费的时间偶尔会出现峰值

java - 捕获所有 java.lang.Error 用于记录目的并允许它们在堆栈中向上工作

java - 编译时: Creation table error