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);
}