如何在Java中以彩虹顺序循环遍历所有RGB组合?

use*_*950 6 java rgb loops colors

我试图以彩虹顺序遍历所有rgb颜色.目前我有这个:

int state = 1;
int a = 255;
int r = 255;
int g = 0;
int b = 0;

if(g < 255 && state == 1){
    g++;
    r--;
    if(g == 255)
        state = 2;
}
if(b < 255 && state == 2){
    b++;
    g--;
    if(b == 255)
        state = 3;
}
if(state == 3){
    r++;
    b--;
    if(b == 0)
        state = 1;
}

int hex = (a << 24) + (r << 16) + (g << 8) + (b);
Run Code Online (Sandbox Code Playgroud)

它的工作原理但它似乎没有得到所有的颜色.我知道这可能是一种不好的做法,是的,我知道我可以在彼此内部做3个循环,但有没有人知道更好的方法来做到这一点,获得所有的颜色?

另外,我没有使用3个循环的原因是因为它需要在每个新的RGB组合之后更新,而不是在循环结束之后更新,因为每次都给我相同的结果.

编辑:感谢pbabcdefp我得到了它的工作,解决方案如下.

int state = 0;
int a = 255;
int r = 255;
int g = 0;
int b = 0;
if(state == 0){
    g++;
    if(g == 255)
        state = 1;
}
if(state == 1){
    r--;
    if(r == 0)
        state = 2;
}
if(state == 2){
    b++;
    if(b == 255)
        state = 3;
}
if(state == 3){
    g--;
    if(g == 0)
        state = 4;
}
if(state == 4){
    r++;
    if(r == 255)
        state = 5;
}
if(state == 5){
    b--;
    if(b == 0)
        state = 0;
}
int hex = (a << 24) + (r << 16) + (g << 8) + (b);
Run Code Online (Sandbox Code Playgroud)

Ves*_*dov 0

您需要找到所有组合。您的代码的问题在于,在一个循环中您修改了两个值。在这种情况下,您会跳过一种颜色。例如,G=100 且 R=100:

g++; r--; 在此行之后,G 将是 101,R 将是 99。下次将是 G102,R98 您现在获得了三种组合:

[g100,r100],g[101,r99],g[102,r98]。

但是这里您错过了许多其他组合,例如 [g100,r99] 和 g[101,r100] 或 g[101,r98] 等。