java - 重复唯一的一对名称数组

标签 java arrays sorting round-robin

我正在尝试用一系列名字(naam)来组成情侣。每次我运行它时,这些对都必须是独一无二的。案例是一位老师试图为amountWeeks结成情侣。周,夫妻必须与其他周不同,不能有 Bob - AliceAlice - Bob 。如果您没有注意到,是的,这是一项任务。我知道你们对此的政策,但我已经坚持了很长时间,即使朝正确的方向插入也会有很大帮助。

我一直这样做:

for (int n = 1; n < amountWeeks + 1; n++) {
    Object[] x = {"WEEK", "<html><b>" + n + "</b></html>"};
    model.addRow(x);
    pos1 = 1;
    pos2 = naam.size() - n;
    for (int i = 0; i < naam.size() / 2; i++) {
        Object[] row = {naam.get(pos1), naam.get(pos2)};
        pos1++;
        pos2 = pos2 - n;
        if (pos2 == pos1) {
            pos2 = pos2 - 1;
        }
        if (pos2 < (naam.size() - 1) / 2) {
            pos2 = pos2 + (naam.size() - 1) / 2;
        }
        model.addRow(row);
    }
}

但这会产生 double ,据我所知这不是最好的方法吗?

最佳答案

如果我正确理解了这个问题,我会将其重述为“如何从给定列表中获取随机且唯一对的新列表”。如果这不正确,请告诉我。

如果是这样,那么它可以分为几个单独的问题。

首先,如何从列表中获取随机对。最简单的方法是打乱列表并取出前两项:

Collections.shuffle(list);
List<Object> pair = Arrays.asList(list.get(0), list.get(1));

其次,如何检查该对是否已在结果列表中。如果您总是在添加列表之前对列表进行排序,那么这很容易:

Collections.sort(pair);
if (!resultList.contains(pair)) {
    resultList.add(pair);
}

这样做的原因是 contains 对项目调用 equals ,因为它们是列表,如果它们大小相同且每个项目相等,则将返回 true 。

最后,如何确保最终在列表中获得正确数量的项目。您实际上只需要在 while 循环中检查大小。

resultList = new ArrayList<>();
while (resultList.size() < n) {
    ....
}

我将把它留给你来把它们放在一起。我会注意到,您面临的危险是源列表不够长,无法生成足够的对。您可以相当简单地检查它作为方法的入口条件,但我也会让您自己解决这个问题。

如果不需要随机性,那么您可以系统地浏览列表:

for (int first = 0; resultList.size() < n && first < list.size(); first++) {
    for (int second = first + 1; resultList.size() < n && second < list.size(); second++) {
        resultList.add(Arrays.asList(list.get(first), list.get(second)));
    }
}

这保证了这些对是唯一的,因为第二个索引总是大于第一个索引。

关于java - 重复唯一的一对名称数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943972/

相关文章:

java - 使用扫描仪读取文本文件

java - setBackground 在 Windows 7 中不起作用

java - 错误: com. mysql.jdbc.JDBC4Connection无法转换为com.mysql.jdbc.Statement

php - 如何在php中将字节数组转换为图像?

java - 我们可以在 Java 中有条件地模拟对象吗?

python - 如何找到二维数组中每一行的最大值?

c++ - 在C++中初始化对象中的数组

python - Pandas 列在一个组内排序,忽略其他列

php - 对加密的 MySQL 表进行排序和查询

c - 对重复数字进行排序