【发布时间】:2014-07-08 19:30:51
【问题描述】:
我已经写了一个洗牌字符串数组的方法所以任务是实现WhiteElephant概念(所有参与者的名字都被放入一个容器(帽子,盒子,包等)并混合在一起。每个然后该人从容器中选择一个名字,但没有告诉任何人选择了哪个名字。他/她现在负责为选定的人购买礼物。) 对于给定的名称列表字符串数组。应该生成分配以匹配原始元素。我已经编写了选择随机数的方法并使用映射来存储值,以便每个数组值都有不同的索引。但这仅打印出 5 个值。我现在很困惑。 ** 一个人必须分配给另一个人;不得将任何人分配给他/她自己。
public static String[] generateAssignments(final String[] participants) {
Random r = new Random();
int size = participants.length;
HashMap val = new HashMap();
int change = 0;
String[] assignments = new String[6];
System.out.println("Using arrays");
for(int i=0; i<size;i++) {
for(int j =0; j<size; j++) {
change = r.nextInt(size);
if(val.containsValue(change) || change==i) {
continue;
}
else val.put(i, change);
assignments[i] = participants[change];
System.out.println(assignments[i]);
break;
}
}
return assignments;
}
感谢您的意见。谢谢,幸运
【问题讨论】:
-
您的打印行并未在所有循环中执行。
continue;是做什么的? -
这个问题对我来说像是家庭作业。虽然问家庭作业问题很好,但这里有一些很好的指导家庭作业问题:How do I ask and answer homework questions?。概括起来就是:先尝试自己解决问题;询问您现有代码的具体问题;让我们知道问题是家庭作业;确保您的班级允许使用问答来寻求帮助;在不了解答案的作用和工作原理之前,不要复制和粘贴答案的代码。
-
我觉得你的问题出在
continue。如果change值已经存在或者change值等于i,那么它不会尝试寻找替代品——它只是跳过它。 -
@TheGuywithTheHat :感谢您在这方面给我讲课 :)。这是我必须完成的任务,我不是要求复制粘贴代码。只是寻找一些关于做什么的指示。从代码中你可以清楚地看到我不擅长java。如果有人能给我一个很好的方向。
-
@TheGuywithTheHat 家庭作业问题不应与其他问题区别对待
标签: java arrays algorithm collections shuffle