所以我试图制作一个使用jawa.awt.colors的随机代码。我希望代码不能像atm那样具有重复项。 该代码需要保留4种颜色。
我发现可以使用java.util.Collections.shuffle(),但是不幸的是,这不适用于java.awt颜色,我稍后需要在代码中使用java.awt.colors,以便不只是使用其他东西。
还有其他方法吗?
下面是我的重复代码:
public class SecretCombination {
public int codeLength = 4;
public Random random = new Random();
public Color[] PossibleColors = {Color.RED, Color.green, Color.blue, Color.yellow, Color.PINK,Color.BLACK};
public Color[] SecretColorCombi = new Color[codeLength];
public SecretCombination() {
for (int i = 0; i < codeLength; i++) {
SecretColorCombi[i] = PossibleColors[random.nextInt(PossibleColors.length)];
}
}
}
答案 0 :(得分:-2)
使用Collections.shuffle
方法可以使用以下方法来实现它,
public static Color[] possibleColors = { Color.RED, Color.green, Color.blue, Color.yellow, Color.PINK, Color.BLACK };
public static List<Color> colorList = Arrays.asList(possibleColors);
public static List<Color> getRandomColorList() {
Collections.shuffle(colorList);
return colorList.subList(0, 4);
}
或者,您也可以尝试使用以下解决方案,看看如何避免选择重复的Color对象。
由于要随机选择唯一的颜色,请更改从固定阵列随机选择元素的策略。因为六个元素中的随机数可以重复。要使其重复免疫,请将颜色存储在列表中而不是数组中。您仍然可以从列表中随机选择元素,但是可以从列表中删除一次被选中的颜色,这样一来,被选中的颜色将不再重复,因为它不再存在于列表中。
这是上面针对我的策略所用版本的更新代码,
public class SecretCombination {
public int codeLength = 4;
public Random random = new Random();
public Color[] PossibleColors = { Color.RED, Color.green, Color.blue, Color.yellow, Color.PINK, Color.BLACK };
public List<Color> colorList = new ArrayList<Color>(Arrays.asList(PossibleColors));
public Color[] SecretColorCombi = new Color[codeLength];
public SecretCombination() {
for (int i = 0; i < codeLength; i++) {
int randIndex = random.nextInt(colorList.size());
Color randColor = colorList.remove(randIndex);
System.out.println("Length: " + colorList.size() + ", Color Picked: " + randColor);
SecretColorCombi[i] = randColor;
}
}
public static void main(String args[]) {
SecretCombination secretCombination = new SecretCombination();
Stream.of(secretCombination.SecretColorCombi).forEach(System.out::println);
}
}
最后,您可以在main方法中打印颜色,以确保它们永远不会重复。
这是该程序的示例输出之一,您可以在其中看到颜色不重复,并且循环时颜色列表缩小一。
Length: 5, Color Picked: java.awt.Color[r=255,g=175,b=175]
Length: 4, Color Picked: java.awt.Color[r=255,g=0,b=0]
Length: 3, Color Picked: java.awt.Color[r=0,g=0,b=255]
Length: 2, Color Picked: java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=255,g=175,b=175]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=0,g=0,b=255]
java.awt.Color[r=0,g=0,b=0]