Java 随机颜色字符串

2022-09-03 17:34:11

我已经写了这个java方法,但有时颜色字符串只有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;
}

答案 1

使用浮点数和使用不是创建此类随机颜色的安全方法。round

实际上,颜色代码是十六进制格式的整数。您可以轻松创建这样的数字:

import java.util.Random;

public class R {
    
    public static void main(String[] args) {
        
        // create random object - reuse this as often as possible
        Random random = new Random();
        
        // create a big random number - maximum is ffffff (hex) = 16777215 (dez)
        int nextInt = random.nextInt(0xffffff + 1);
        
        // format it as hexadecimal string (with hashtag and leading zeros)
        String colorCode = String.format("#%06x", nextInt);
        
        // print it
        System.out.println(colorCode);
    }

}

DEMO


答案 2

您将生成一个长度为 17 的数组,开头有一个空字符串。生成器偶尔会绘制第 0 个元素,该元素不会影响最终字符串的长度。(作为副作用,永远不会被绘制。splitF

  1. 接受它具有这种奇怪的行为并使用它:抛弃使用.请改用为索引。splitround1 + random.nextInt(16)

  2. 不要在 每次调用 时重新创建生成器,这会破坏生成器的统计属性。作为参数传递给 。getRandomColorrandomgetRandomColor


推荐