颜色的随机代码(jawa.awt),无重复

时间:2018-11-21 19:11:00

标签: java random

所以我试图制作一个使用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)];
    }
}

}

1 个答案:

答案 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]