当前位置: 首页 > 面试题库 >

我该如何比较Java中的颜色?

归和惬
2023-03-14
问题内容

我试图制作一个随机的颜色生成器,但我不希望在arrayList中显示类似的颜色

public class RandomColorGen {

public static Color RandColor() {
    Random rand = new Random();
    float r = rand.nextFloat();
    float g = rand.nextFloat();
    float b = rand.nextFloat();
    Color c = new Color(r, g, b, 1);
    return c;

}

public static ArrayList<Color> ColorList(int numOfColors) {
    ArrayList<Color> colorList = new ArrayList<Color>();
    for (int i = 0; i < numOfColors; i++) {
        Color c = RandColor();
        if(similarcolors){
            dont add
        }
        colorList.add(c);

    }
    return colorList;
}

}

我真的很困惑,请帮助:)


问题答案:

在Color类中实现相似方法。

然后使用:

public static ArrayList<Color> ColorList(int numOfColors) {
    ArrayList<Color> colorList = new ArrayList<Color>();
    for (int i = 0; i < numOfColors; i++) {
        Color c = RandColor();
        boolean similarFound = false;
        for(Color color : colorList){
            if(color.similarTo(c)){
                 similarFound = true;
                 break;
            }
        }
        if(!similarFound){
            colorList.add(c);
        }

    }
    return colorList;
}

要实现likeTo:

看一下RGBA颜色空间中的颜色相似度/距离,并以编程方式找到相似的颜色。一种简单的方法可以是:

((r2-r1)2 +(g2-g1)2 +(b2-b1)2)1/2

和:

boolean similarTo(Color c){
    double distance = (c.r - this.r)*(c.r - this.r) + (c.g - this.g)*(c.g - this.g) + (c.b - this.b)*(c.b - this.b)
    if(distance > X){
        return true;
    }else{
        return false;
    }
}

但是,您应该根据类似的想象找到X。



 类似资料:
  • 问题内容: 我想更改按钮状态为不同的状态。我这样尝试: 但是在第一个按钮println中,打印nil且背景变为红色;在第二个按钮println中,打印“ Optional(UIDeviceRGBColorSpace 1 0 0 1)”,并且颜色不变 问题答案: 您不使用运算符比较颜色。您可以这样操作,并且需要打开可选的颜色: 另外,请删除分配声明中的无关内容。它应该是:

  • 本文向大家介绍我们如何比较Java中的StringBuilder和StringBuffer?,包括了我们如何比较Java中的StringBuilder和StringBuffer?的使用技巧和注意事项,需要的朋友参考一下 该StringBuffer的 对象通常是安全的使用多线程环境中多个线程可能试图访问同一StringBuffer的 同时对象。该StringBuilder的 是用于替换线程安全Str

  • 问题内容: 到目前为止,我一直在程序中使用运算符比较所有字符串。但是,我遇到了一个错误,将其中一个更改为错误,并修复了该错误。 是==坏?什么时候应该使用它,不应该使用它?有什么不同? 问题答案: 测试引用是否相等(它们是否是同一对象)。 测试值是否相等(在逻辑上是否为“相等”)。 在调用之前进行检查,因此您不必(在JDK7起可用,在Guava中也可用)。 因此,如果要测试两个字符串是否具有相同的

  • 此外,我重写了hashCode()以: 现在,即使两个对象都是@dog0,print语句也会打印false。想知道为什么控制台:

  • 问题内容: 我已经看到了同时实现Comparable和Comparator的类。这是什么意思?为什么我要一个使用另一个? 问题答案: 下面的文字来自Comparator vs Comparable 可比 可比较的对象能够将自己与另一个对象进行比较。类本身必须实现java.lang.Comparable接口,以便能够比较其实例。 比较器 比较器对象能够比较两个不同的对象。该类不是在比较其实例,而是在

  • 问题内容: 如何在Java中比较两者之间的日期? 例: date1是 date2是今天 date3是 总是大于和今天始终。如何验证今天的日期是否在和之间? 问题答案: 日期有之前和之后的方法,可以相互比较,如下所示: 进行包容性比较: 你也可以尝试一下Joda-Time,但请注意: Joda-Time是Java SE 8之前的Java的事实上的标准日期和时间库。现在,要求用户迁移到java.tim