当前位置: 首页 > 知识库问答 >
问题:

在Java中如何在数组中查找完全相同的颜色

胥博文
2023-03-14

我有一个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
    }
}

共有2个答案

邢和光
2023-03-14

下面是一个使用集合来保持唯一性的解决方案。这节省了重新发明所有功能以检查重复项的时间。如果对象已添加到集合中,则Set接口的add方法返回true,这一点可以利用。当然,在封面下,它使用了equals方法Color

在发现重复的情况下,我们反复尝试通过对其三个组件进行位异或修改一点颜色,直到我们得到一个唯一的组件。

public void deduplicate(Color[] colors) {
    Set<Color> uniqueColors = new HashSet<>();
    for (int which = 0; which < colors.length; which++) {
        Color originalColor = colors[which];
        boolean unique = uniqueColors.add(originalColor);
        for (int modifyBy = 1; !unique ; modifyBy++) {
            colors[which] = new Color(
                    originalColor.getRed() ^ modifyBy, 
                    originalColor.getGreen() ^ modifyBy, 
                    originalColor.getBlue() ^ modifyBy);
            unique = uniqueColors.add(colors[which]);
        }
    }
}
狄溪叠
2023-03-14

学习您使用的类的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();
    }
}
 类似资料:
  • 假设有一个名称按钮数组: 私有JButton按钮[]=新JButton[9] 如何将此数组中所有按钮的颜色设置为蓝色? 这是我的全部代码:这是一个使用按钮的井字游戏。

  • 问题内容: 我只是在练习一些MIT Java作业。但是,我不确定如何找到第二大数字。http://ocw.csail.mit.edu/f/13 问题答案: 仅对数组进行排序以查找订单统计信息太浪费了。您可以通过遵循与现有算法相似的算法找到第二大元素,并使用一个代表第二大数字的附加变量。 当前,下一个元素可以大于最大值或等于/小于最大值,因此单个元素就足够了: 考虑两个变量,下一个元素可能是 大于最

  • 问题内容: 我在生成针对此问题的查询时遇到问题。 我有这张小桌子 我需要找到任务完全相同的所有成对的员工。 例如,使用结果集上方的数据应为: 我正在为数据库使用mySQL。谢谢! 问题答案:

  • 对于名为cb_节点的数组,我有不同数量的列。要对这些数据进行后处理,需要准确知道每行中的列数。 数组如下所示。 等等...数组中的每一行都有不同数量的列数。只是个例子,数组中的键是不同的。 TCL中的命令集只有和,它没有给出每行的行号和列号。 在TCL,我们如何做到这一点?

  • 问题内容: 改写: 在我的项目中,我有图像。每个图像有5个标签,范围为[1,10]。我用Elasticsearch上传了这些标签: 我将这些文件加载​​到类型为“ img”的索引“ my_project”中的elasticsearch中: 我上传的其他示例文件: 在我的应用程序中,向量要长得多,但是具有固定数量的唯一元素。我喜欢这些文件中的20M。 现在,我想找到给定向量的相似文档。向量具有更多公

  • 结论如下:[0,2]->[1,2]->[2,2]->[2,3]->[2,4]->[3,4]->[4,4]->[5,4]->[5,3]->[5,2]->[5,1]->[4,1]->[4,2]->[3,2]->[3,1]->[2,1]->[2,2]->[1,2]->[2,2]->[1,2]->[2,2]->[2,2]->[1,2]->[2,2]->[2,2]->[2,2]->[1,2] 我不明白故障在