生成随机字符串,缺少一个字母

Generating random strings, missing one letter

我在尝试生成随机大小(3 到 20 之间)的随机字符串时遇到了一个小问题。我有一个数组 arr,其中包含从 a(小写)到 Z(大写)的所有字符。然后我为第二个数组 arr2 生成一个随机长度 arrLength,它将包含一些随机选择的字符。

我的问题是字母 'a'(小写)从未出现在我随机生成的字符串中。我认为错误可能在 for 循环内,但到目前为止我没有看到它。也许它与 (int) 转换或 Math.floor 舍入有关?

    char[] arr = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
    int arrLength = (int) (Math.floor((Math.random() * ((17 - 3) + 1)) + 3));
    char[] arr2 = new char[arrLength];
    String str = "";

    for(int i=0;i<arrLength;i++) {
        char num = arr[(int) (Math.floor(Math.random() * (50) + 1))];
        arr2[i] = num;
    }

使用 arr.length 代替魔法常量 50(注意数组中有超过 50 个字符)并省略 +1,因为它是您可以得到的最小数字达到 1 并且数组索引从 Java.

中的 0 开始