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

时间:2016-11-21 20:27:25

标签: java arrays random casting rounding

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

我的问题是字母“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;
    }

1 个答案:

答案 0 :(得分:5)

而不是魔术常量50使用arr.length(注意数组中有超过50个字符)并省略+1,因为它是您可以获得的最低数字1,数组索引在Java中从0开始。