我有24种颜色的数组。偶尔当我生成它时,我会得到具有完全相同RGB值的颜色。我想要做的是找到数组中的重复项,并将匹配值更改为1或2.只是为了使它不再匹配。
这是我的颜色数组。请注意,有3个确切的红色阴影。我希望每个人彼此略有不同。保持R通道相同,但将G和B通道更改为1或2个数字。
Color Array: [java.awt.Color[r=255,g=194,b=23], java.awt.Color[r=255,g=0,b=0], java.awt.Color[r=255,g=0,b=0], java.awt.Color[r=0,g=67,b=255], java.awt.Color[r=0,g=255,b=175], java.awt.Color[r=255,g=13,b=10], java.awt.Color[r=255,g=115,b=43], java.awt.Color[r=2,g=92,b=255], java.awt.Color[r=241,g=219,b=255], java.awt.Color[r=255,g=194,b=0], java.awt.Color[r=231,g=210,b=255], java.awt.Color[r=0,g=43,b=255], java.awt.Color[r=255,g=80,b=0], java.awt.Color[r=255,g=205,b=27], java.awt.Color[r=255,g=0,b=9], java.awt.Color[r=205,g=199,b=255], java.awt.Color[r=0,g=44,b=255], java.awt.Color[r=255,g=0,b=0], java.awt.Color[r=21,g=255,b=219], java.awt.Color[r=255,g=199,b=51], java.awt.Color[r=255,g=82,b=2], java.awt.Color[r=215,g=198,b=255], java.awt.Color[r=0,g=255,b=203], java.awt.Color[r=255,g=98,b=28]]
我在想的是迭代数组。
for(int i = 0; i < colorArray.length; i++){
if(colorArray[i] == //not sure what this would be equal to as it will be checking all the values in the array ) {
colorArray[i].getBlue() = matchingColor.getBlue() += 1;
colorArray[i].getGreen() matchingColor.getGreen() += 2; //These are example values just to make sure that they have no match
}
}
答案 0 :(得分:4)
学习您使用的类的API非常有用。
for(int i = 0; i < colorArray.length; i++) {
// use while in case the color is black/white. (May thrash for few iterations)
while (colorArray[i].equals(matchingColor)) {
colorArray[i] = (Math.random() < 0.5)?colorArray[i].brighter():colorArray[i].darker();
}
}
答案 1 :(得分:0)
以下是使用Set
来保持唯一性的解决方案。这样可以节省重新发明所有功能以检查重复项。如果对象已添加到集合中,则利用add
接口的Set
方法返回true
这一事实。当然,它使用equals
的{{1}}方法。
如果发现重复,我们会反复尝试修改Color
一点,通过按位排他或其三个组件,直到我们找到一个独特的组件。
Color