gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:01:45 24 4
gpt4 key购买 nike

我正在尝试用一系列名字(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com