字符串生成算法在使用三元运算时给出不一致的结果

时间:2017-09-08 16:44:49

标签: java

我有这段代码,它产生一个随机ASCII字符,基于65到90的随机数生成器(ASCII中的A-Z),有50%的可能性是字母或数字。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 15; i++) {
    if (random(0, 100) < 50) { //50% chance of it being a number or letter
        sb.append((char) random(65, 90)); 
    } else {
        sb.append(random(0, 9));
    }      
}

输出:

9M0753YB840X370

现在,如果我们让它更漂亮并使用三元运算符,我们就会得到:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 15; i++) {
    sb.append(random(0, 100) < 50 ? (char) random(65, 90) : random(0, 9));   
}

输出:

69817716898127868775697285

输出随机值的方法:

public static int random(int min, int max) {
    return (int) (Math.random() * (max - min + 1) + min);
}

我无法弄清楚为什么这不能按预期工作,因为在这种情况下三元和if块应该是等效的。 总而言之,代码块if有效,但三元代码不起作用。

0 个答案:

没有答案