Java for循环迭代和列表颜色

时间:2013-01-11 09:12:13

标签: java for-loop colors

在此代码中

int[] values = new int[] {0, 32, 64, 96, 128, 160, 192, 224, 255};
        for (int r = 0; r < values.length; r++){
          for (int g = 0; g < values.length; g++){
            for (int b = 0; b < values.length; b++) {
                System.out.println("Colors are: " + values[r]+ ","+values[g]+ ","+values[b]);

我有一个颜色列表,但它们没有订购:我希望更改这个for循环,以获得从白色到黑色的相反颜色列表,或者相反的黑色到白色。

如何更改此循环?

非常感谢

2 个答案:

答案 0 :(得分:5)

我会这样写的

int[] values = new int[]{0, 32, 64, 96, 128, 160, 192, 224, 255};
SortedMap<Long, Color> colours = new TreeMap<>(Collections.reverseOrder());
for (int r : values) {
    for (int g : values) {
        for (int b : values) {
            long brightness = (r + g + b) / 3;
            long colourScore = (brightness << 24) + (r << 8) + (g << 16) + b;
            colours.put(colourScore, new Color(r,g,b));
        }
    }
}
for (Color color : colours.values()) {
    System.out.println(color);
}

这有利于红色和绿色的蓝色,因为蓝色着色与夜晚有关。 ;)打印

java.awt.Color[r=255,g=255,b=255]
java.awt.Color[r=255,g=255,b=224]
java.awt.Color[r=224,g=255,b=255]
java.awt.Color[r=255,g=224,b=255]
java.awt.Color[r=255,g=255,b=192]
java.awt.Color[r=224,g=255,b=224]
java.awt.Color[r=192,g=255,b=255]
... many deleted ...
java.awt.Color[r=32,g=0,b=32]
java.awt.Color[r=0,g=0,b=64]
java.awt.Color[r=0,g=32,b=0]
java.awt.Color[r=32,g=0,b=0]
java.awt.Color[r=0,g=0,b=32]
java.awt.Color[r=0,g=0,b=0]

答案 1 :(得分:3)

你需要:

  1. 表示完整RGB三元组的Color类;
  2. Comparable上实施Color,从而明确确定所需颜色顺序的构成;
  3. 在您的嵌套循环中,您将构建所有颜色的TreeSet。迭代它时,您将获得所需顺序的颜色。
  4. 由于颜色本质上是三维实体,因此如何线性化它们的顺序并不是很明显,所以你必须做出一些妥协。