连续生成随机枚举值而不会获得相同的值两次

Ron*_*Ron 3 java random enums

我有一个enum团队,我想随机.所以我有:

public enum Teams { TEAM1, TEAM2, TEAM3, TEAM4, TEAM5, TEAM6; }
Run Code Online (Sandbox Code Playgroud)

然后我有一个随机方法来随机生成值:

public static Teams getRandomTeam() {
    return Teams.values()[(int) (Math.random() * Teams.values().length)];
}
Run Code Online (Sandbox Code Playgroud)

这确实会返回一个随机生成的团队,但是我需要,一旦团队生成,比如说TEAM2,它就不能再生成了.

我正在使用:

System.out.println("The team is " + getRandomTeam());
System.out.println("The team is " + getRandomTeam());
System.out.println("The team is " + getRandomTeam());
System.out.println("The team is " + getRandomTeam());
System.out.println("The team is " + getRandomTeam());
System.out.println("The team is " + getRandomTeam());
Run Code Online (Sandbox Code Playgroud)

(我知道这是错误的,因为它一遍又一遍地调用这个方法.

在我运行程序的那一刻,输出可能是:

团队是:TEAM2

团队是:TEAM2

团队是:TEAM4

团队是:TEAM2

团队是:TEAM3

团队是:TEAM2

但我需要我的程序只输出一次枚举值.谢谢

Grz*_*Żur 10

只需使用Collections.shuffle.

List<Team> teams = new ArrayList<>();
Collections.addAll(teams, Team.values());
Collections.shuffle(teams);
Run Code Online (Sandbox Code Playgroud)


Tal*_*ala 5

最好逐个洗牌收集和返回元素.

  private static List<Teams> tList;

  private static void regenerateList() {
      tList = new ArrayList<Teams>(Arrays.asList(Teams.values()));
      Collections.shuffle(tList);
  }

  public static Teams getRandomTeam() {
      if (tList.size() > 0) {
         return tList.remove(0);
      } else {
          //handle as you wish: return null or regenerate the list 
         regenerateList();
         return getrandomTeam();
      }
  }
Run Code Online (Sandbox Code Playgroud)