Java-toString颜色
我一整天都在努力解决这个问题 基本上,我制作了一个for循环,将条目添加到arraylist中。其中一个条目是“颜色”变量。我使用了Java-toString颜色,java,colors,rgb,tostring,Java,Colors,Rgb,Tostring,我一整天都在努力解决这个问题 基本上,我制作了一个for循环,将条目添加到arraylist中。其中一个条目是“颜色”变量。我使用了random.nextInt为颜色构造函数的红色、绿色和蓝色部分创建了新值。我还设置了一个toString方法,以便可以看到进入arraylist的值 问题是: 打印时我得到:java.awt.Color[r=248,g=103,b=53] 我明白为什么会这样,我只是想知道如何改变它,使输出显示“橙色”、“绿色”或“紫色”,这取决于随机rgb值是什么 我在这里查看了
random.nextInt
为颜色构造函数的红色、绿色和蓝色部分创建了新值。我还设置了一个toString
方法,以便可以看到进入arraylist的值
问题是:
打印时我得到:java.awt.Color[r=248,g=103,b=53]
我明白为什么会这样,我只是想知道如何改变它,使输出显示“橙色”、“绿色”或“紫色”,这取决于随机rgb值是什么
我在这里查看了一下,发现我可能会使用
getRGB
方法和解析,而这正是我陷入困境的地方。。。任何帮助都很好:)您可以创建一个扩展Color的类,该类包含一个名为“colorName”的字符串,然后将其打印到toString上
默认情况下,颜色不存储此名称,而且,通过比较这些红色、绿色和蓝色值很难识别颜色。这不存在。祝您好运,滚动您自己的-它需要返回256 x 256 x 256(16777216)个不同字符串中的一个才能工作。例如,你如何区分蓝色的所有色调?为什么RGB值不适用于您?您可以对颜色进行子类化并覆盖toString方法(或创建PrintColor方法或任何名称),然后可以为特定范围的RGB值输出特定颜色标签
显然,您对颜色名称的选择和指定的具体范围完全是主观的。您可以将
颜色子类化,以覆盖toString()
方法,或添加您自己的另一种方法将RGB转换为命名颜色。或者您可以在某个地方使用静态方法将RGB转换为命名颜色
但是,如果有256*256*256=~1600万种不同的RGB组合,大多数随机RGB组合将不会与命名颜色对应。因此,我不确定这是否值得去做。这不是小事,而是主观的
不过,您可能想看看哪些尝试来回答这个问题。我从来没有真正遇到过您要求的东西,但这对您有用吗?(您可能需要根据自己的需要:
您在哪里设置了这个toString方法?可能的重复也可以看到我可以让RGB值工作,但我想看看是否可以让名称显示出来。我需要做的是为每个“选举党”生成一个随机颜色,然后在arraylist中添加选票。我可能只是制作一个颜色(单词)数组,而不让选举党的数量超过颜色数组列表的大小……可能更容易:P
public final class ColorUtil {
static private HashMap<String,Color> KNOWNCOLORS = new HashMap<String,Color>();
static {
KNOWNCOLORS.put("black", Color.black);
KNOWNCOLORS.put("darkgray", Color.darkGray);
KNOWNCOLORS.put("lightgray", Color.lightGray);
KNOWNCOLORS.put("white", Color.white);
KNOWNCOLORS.put("red", Color.red);
KNOWNCOLORS.put("blue", Color.blue);
KNOWNCOLORS.put("green", Color.green);
KNOWNCOLORS.put("pink", Color.pink);
KNOWNCOLORS.put("cyan", Color.cyan);
KNOWNCOLORS.put("purple", Color.magenta);
KNOWNCOLORS.put("orange", Color.orange);
KNOWNCOLORS.put("yellow", Color.yellow);
// add more here
}
static public String getBestColorName(Color c) {
int dist, diff = Integer.MAX_VALUE;
String colorName = toHex(c);
Color c2;
for (String name : KNOWNCOLORS.keySet()) {
c2 = KNOWNCOLORS.get(name);
dist = Math.abs(c.getRed() - c2.getRed())
+ Math.abs(c.getGreen() - c2.getGreen())
+ Math.abs(c.getBlue() - c2.getBlue())
+ Math.abs(c.getAlpha() - c2.getAlpha());
if (dist < diff) {
diff = dist;
colorName = name;
}
}
return colorName;
}
static public int getColorValue(Color c) {
return (c.getAlpha() << 24)
| (c.getRed() << 16)
| (c.getGreen() << 8)
| (c.getBlue());
}
static public String toHex(Color c) {
StringBuilder b = new StringBuilder();
if (c.getAlpha() < 255) {
b.append(padLeft(Integer.toString(c.getAlpha(), 16), 2));
}
b.append(padLeft(Integer.toString(c.getRed(), 16), 2));
b.append(padLeft(Integer.toString(c.getGreen(), 16), 2));
b.append(padLeft(Integer.toString(c.getBlue(), 16), 2));
return b.toString();
}
static private String padLeft(String s, int n) {
return String.format("%1$#" + n + "s", s).replace(" ", "0");
}
private ColorUtil() {}
static public void main(String...args) {
Color c;
for (String name : KNOWNCOLORS.keySet()) {
if (!name.equals(getBestColorName(KNOWNCOLORS.get(name)))) {
System.out.println("*** ERR!! Could not match color " + name);
}
}
for (int i=0; i<30; i++) {
c = new Color((int) (Math.random() * 256), (int) (Math.random() * 256), (int) (Math.random() * 256));
System.out.println("Color " + toHex(c)
+ " (" + c.getAlpha() + "," + c.getRed() + "," + c.getGreen() + "," + c.getBlue() + ")"
+ " = " + getBestColorName(c));
}
System.out.println("Done!");
}
}
Color e75848 (255,231,88,72) = red
Color 6f4854 (255,111,72,84) = darkgray
Color 5dc6af (255,93,198,175) = lightgray
Color 190971 (255,25,9,113) = darkgray
Color 8ef300 (255,142,243,0) = yellow
Color c2ec5b (255,194,236,91) = lightgray
Color 998794 (255,153,135,148) = lightgray
Color 328d06 (255,50,141,6) = darkgray
Color 223d03 (255,34,61,3) = darkgray
Color 51dfea (255,81,223,234) = cyan
Color baa801 (255,186,168,1) = orange
Color 8370d4 (255,131,112,212) = lightgray
Color 7766bd (255,119,102,189) = lightgray
Color 35024b (255,53,2,75) = darkgray
Color cdbfad (255,205,191,173) = lightgray
Color 5e3a21 (255,94,58,33) = darkgray
Color 11af5d (255,17,175,93) = darkgray
Color 480995 (255,72,9,149) = darkgray
Color 04adab (255,4,173,171) = cyan
Color 98641c (255,152,100,28) = darkgray
Color 3ef68c (255,62,246,140) = cyan
Color 4d091a (255,77,9,26) = darkgray
Color 56117d (255,86,17,125) = darkgray
Color 1a00ea (255,26,0,234) = blue
Color 2ffd3e (255,47,253,62) = green
Color 9a918b (255,154,145,139) = lightgray
Color 6f8f0e (255,111,143,14) = darkgray
Color 5f3e25 (255,95,62,37) = darkgray
Color 914e79 (255,145,78,121) = darkgray
Color 57f88b (255,87,248,139) = cyan
Done!