我已经编写了这个java方法,但有时颜色String只有5个字符长。有谁知道为什么?
@Test
public void getRandomColorTest() {
for (int i = 0; i < 20; i++) {
final String s = getRandomColor();
System.out.println("-> " + s);
}
}
public String getRandomColor() {
final Random random = new Random();
final String[] letters = "0123456789ABCDEF".split("");
String color = "#";
for (int i = 0; i < 6; i++) {
color += letters[Math.round(random.nextFloat() * 15)];
}
return color;
}
答案 0 :(得分:17)
使用浮动并使用{
minilr: "Welcome",
version: "0.1.8"
}
并不是创建此类随机颜色的安全方法。
实际上,颜色代码是十六进制格式的整数。您可以轻松创建如下数字:
round
答案 1 :(得分:2)
您的split
将生成一个长度为17的数组,其开头为空字符串。您的生成器偶尔会绘制出第0个元素,这个元素不会影响最终字符串的长度。 (作为副作用,永远不会绘制F
。)
接受split
具有奇怪的行为并使用它:放弃使用round
的令人讨厌的公式。请使用1 + random.nextInt(16)
作为索引。
不要在getRandomColor
的每次调用中重新创建生成器:这会破坏生成器的统计属性。将random
作为参数传递给getRandomColor
。
答案 2 :(得分:1)
另外,为了确保您的String始终包含6个字符,请尝试将for
循环替换为while
。请参阅:
while (color.length() <= 6){
color += letters[random.nextInt(17)];
}