java - 这是关于 Math.random() 并转换为 (int)
问题描述
为什么变量 a 和 b 没有得到任何值?我已经这样做了,一个带有 1-100 数字的 100 面骰子被掷了 50.000 次,我想看看它多久给出数字 1 和 100,但它没有得到任何价值。结果仍然是 a= 0 和 b = 0。
package Atest;
import javax.swing.*;
public class Tärning5{
public static void main(String[] arg){
int rolls;
double dice = (int) (Math.random()*100) + 1;
int n = 0;
int b=0, a=0;
for(rolls=50000; n<=rolls; dice = (int) (Math.random()*100) + 1) {
n++;
if(dice == 100)
a = a++;
else if (dice == 1)
b = b++;
}
JOptionPane.showMessageDialog(null, "Dice rolls " + rolls + " times"
+ "\n"
+ "\nDice landed on 100 " +a+" times"
+ "\nDice landed on 1 "+b+" times");
}
}
解决方案
我建议使用 java.util.Random 生成随机数。您还可以简化循环,使其更简单。
int a = 0;
int b = 0;
int rolls = 50000;
Random random = new Random();
for (int i = 0; i < rolls; i++) {
int dice = random.nextInt(100) + 1;
if (dice == 100) a += 1;
if (dice == 1) b += 1;
}
System.out.println("a: " + a + ", b: " + b);
“for”语句中的条件不涉及迭代计数以外的任何内容。在循环内部,我们可以通过使用现有的 Random 创建下一个随机整数来“模拟”掷骰子(在此示例中:在 1 到 100 的范围内)。
示例输出:
a: 502, b: 475
推荐阅读
- c# - 服务接口良好实践
- python - 在情节中更改悬停文本值
- php - 忽略 cakephp 3.6.x 上的 SMTP 异常错误
- rust - How to set the proper lifetime of `self` when calling tokio::spawn?
- sql - Oracle SQL - REGEXP_LIKE 在 CHECK 约束中没有按预期工作
- python-3.x - ModuleNotFoundError: No module named 'sklearn.externals.joblib'
- workday-api - Workday Studio 中使用 AM/PM 的日期时间格式
- python - 如何将 QTableWidget 编辑状态下的单元格大小增加超过行大小?
- r - In R, how to know if a function printed warning messages to the console before return?
- java - 为什么使用打印流打印字节(数字数据类型)会给我字符?