使用Math.random()生成-50到50随机Double数组时数值超上限问题
问题原因
你编写的随机数生成逻辑本身没有问题,问题出在打印输出的代码语法错误:
Math.random()原生返回的是 左闭右开 区间[0.0, 1.0)的双精度浮点数,按照100 * Math.random() - 50的计算逻辑,得到的结果范围是[-50.0, 50.0),理论上不可能出现大于等于50的数值。- 错误出在打印语句的拼接逻辑:你代码里写的是
System.out.println(i + ',');,其中包裹逗号的是单引号,代表这是一个char(字符)类型的值。在Java中,char类型的本质是整数,逗号对应的ASCII编码值为44,所以这里并不会执行字符串拼接,而是会先把随机数的double值和44做算术加法运算,再把运算结果打印出来。
你输出里的异常值正好可以对应这个逻辑:
93.00810678750743 实际是 49.00810678750743 + 44得到的结果
54.0536237451922 实际是 10.0536237451922 + 44得到的结果
修复方案
把打印语句里的单引号改为双引号,让逗号变成字符串类型,触发字符串拼接逻辑即可:
// 修复后的打印代码 for (double i: randomNums) { System.out.println(i + ","); }
内容的提问来源于stack exchange,提问作者crlav
相关产品推荐
相关产品推荐

