Java for循环显示2个结果,然后显示3个结果?
我确切地知道发生了什么,但我一辈子都搞不懂,我已经有一段时间没有编程了,所以请原谅这些丑陋的代码 基本上我想做一个“给帽子取个名字”的概念。。。因为我想随机选择“匹配项” 但有时我会被展示:Java for循环显示2个结果,然后显示3个结果?,java,Java,我确切地知道发生了什么,但我一辈子都搞不懂,我已经有一段时间没有编程了,所以请原谅这些丑陋的代码 基本上我想做一个“给帽子取个名字”的概念。。。因为我想随机选择“匹配项” 但有时我会被展示: Harry v Kwok Matthew v Lewis James v Ceri 其他则是: Ceri v James Kwok v Harry import java.util.*; 公营拣帽{ 公共静态void main(字符串[]args){ //将一个值链接到另一个值---例如0=ceri,
Harry v Kwok
Matthew v Lewis
James v Ceri
其他则是:
Ceri v James
Kwok v Harry
import java.util.*;
公营拣帽{
公共静态void main(字符串[]args){
//将一个值链接到另一个值---例如0=ceri,1=Harry
HashMap=newHashMap();
map.put(0,“Ceri”);
地图放置(1,“哈利”);
地图放置(2,“马太”);
图.put(3,“Lewis”);
地图放置(4,“郭”);
地图放置(5,“詹姆斯”);
int HashmapValue=6;
//对于仅制作3个装置的回路
对于(int i=1;i如果我理解您的问题,那是因为有时val1==val2
。如果的话,您可以在中添加一个else块
// != is only safe because of reference equality due to the Map(s).
if(val1 != null && val1 != val2 && val2 != null){
map.remove(first);
map.remove(second);
//prints Fixtures
System.out.println(val2 + " v " + val1);
} else {
i--; // repeat.
}
编辑
根据您的评论,我实际上会使用Collections.shuffle()
和
String[] competitors = { "Ceri", "Harry",
"Matthew", "Lewis", "Kwok", "James" };
Collections.shuffle(Arrays.asList(competitors));
for (int i = 0; i < competitors.length; i += 2) {
System.out.printf("%s v %s%n", competitors[i],
competitors[i + 1]);
}
String[]竞争者={“Ceri”,“Harry”,
“马修”、“刘易斯”、“郭”、“詹姆斯”};
集合.shuffle(数组.asList(竞争对手));
对于(int i=0;i<0.length;i+=2){
System.out.printf(“%s v%s%n”),竞争对手[i],
竞争对手[i+1];
}
您需要幸运的是,您生成的值仍然在映射中。您总是生成一个介于0和5之间的数字,但是当您删除元素时,映射会变小。只需将循环条件从20更改为继续,直到映射
为空:
while (!map.isEmpty()) {
// Generates 2 Random Numbers
int first = (int) (Math.random() * HashmapValue);
...
您应该在代表您的人口的列表上使用简单排列:
伪代码将是
List<Player> list= {...} << put what ever represent your player
for(int i= 0 ; i < list.size ; i++) { //Random permutation
int j = random(list.size) // return
list.swap(i,j);
}
List<Group> groups;
for (int i = 0 ; i < list.size - 1; i+=2){
groups.add(new Group(list.get(i), list.get(i+1);
}
List List={…}到底是什么问题?发生了什么你没有预料到的事情?想必,有时val1==val2
会跳过该条目。val1
和val2
是字符串,你应该通过.equals()进行比较
。试着提供。@ElliottFrisch本次比赛共有6人,显然我希望每名球员在1场比赛中有3场比赛,有时我会得到Harry v Kwok Matthew v Lewis James v Ceri,其他人是:Ceri v James Kwok vHarry@user3594073请看下面我编辑的答案。您的代码可以简化。这已对我的问题进行了排序我非常感谢你,我真想把我的显示器撕下来。
List<Player> list= {...} << put what ever represent your player
for(int i= 0 ; i < list.size ; i++) { //Random permutation
int j = random(list.size) // return
list.swap(i,j);
}
List<Group> groups;
for (int i = 0 ; i < list.size - 1; i+=2){
groups.add(new Group(list.get(i), list.get(i+1);
}