1

このコードでは

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 ループに変更して、白から黒、またはその逆の黒から白への順序付けされた色のリストを取得したいと考えています。

このループをどのように変更しますか?

どうもありがとうございました

4

2 に答える 2

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]
于 2013-01-11T09:30:51.997 に答える
3

あなたは必要になるでしょう:

  1. Color完全な RGB トリプレットを表すクラス。
  2. Comparableonを実装しColorます。これにより、希望する色の順序を正確に決定します。
  3. ネストされたループではTreeSet、すべての色を作成します。それを繰り返すと、希望の順序で色が得られます。

色は本質的に 3 次元のエンティティであるため、それらの順序を線形化する方法が明確ではないため、いくつか妥協する必要があります。

于 2013-01-11T09:16:47.020 に答える