【发布时间】:2017-09-20 13:52:54
【问题描述】:
我有一个 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
}
}
【问题讨论】:
-
有什么特殊原因不能使用
colorArray[i].equals(matchingColor)? -
对于我的比较,比较参考而不是对象似乎效果更好。我不反对它,但宁愿只是比较参考。 @Tibrogargan
-
为什么不将它们生成为某种
Set,并在Set具有正确数量的元素时停止? -
另外,可能有两个不同的
Color对象具有相同的 RGB 值,因此比较参考是不好的。 -
equals不做参考比较,它依赖于对象实现。在这种情况下:当且仅当参数不为 null 并且是具有与此对象相同的红色、绿色、蓝色和 alpha 值的 Color 对象时,结果才为真。