Java技术问询:统计骰子各点数掷出次数的代码修正与实现
修正骰子点数统计的Java代码
嘿,我一眼就揪出你代码里的致命问题了——每个if语句后面都多了个分号!这个小疏忽直接让统计逻辑完全失效:分号会被当成空语句执行,不管if的条件是否成立,后面花括号里的计数器自增操作都会触发,结果就是每次掷骰子,所有点数的次数都会加1,完全不是你想要的效果。
另外你的代码还没写完dieSix的统计部分,而且用六个独立变量存次数也有点繁琐,我给你两种修正方案,按需选就行:
方案1:基于原代码的最小修正(保留单个变量)
这个方案只修复逻辑错误,保留你原来的变量命名习惯:
import java.util.Random; import java.util.Scanner; public class Die { public static void main(String[] args) { Random r = new Random(); int dieOne=0, dieTwo=0, dieThree=0, dieFour=0, dieFive=0, dieSix=0; Scanner input = new Scanner(System.in); System.out.println("How many times would you like the die to roll?: "); int numRoll = input.nextInt(); for (int i=0; i < numRoll; i++) { int rNum = r.nextInt(6) + 1; // 生成1-6的随机数 // 关键:去掉每个if后面的多余分号! if (rNum == 1) { dieOne++; } if (rNum == 2) { dieTwo++; } if (rNum == 3) { dieThree++; } if (rNum == 4) { dieFour++; } if (rNum == 5) { dieFive++; } // 补全dieSix的统计逻辑 if (rNum == 6) { dieSix++; } } // 添加统计结果输出(原代码缺失这部分) System.out.println("骰子点数统计结果:"); System.out.println("1点出现次数:" + dieOne); System.out.println("2点出现次数:" + dieTwo); System.out.println("3点出现次数:" + dieThree); System.out.println("4点出现次数:" + dieFour); System.out.println("5点出现次数:" + dieFive); System.out.println("6点出现次数:" + dieSix); input.close(); // 记得关闭输入流 } }
方案2:更简洁的数组实现(推荐)
用数组存点数次数会更清爽,代码量更少,后续维护也更方便(比如要扩展到10面骰子,只需要改数组长度就行):
import java.util.Random; import java.util.Scanner; public class Die { public static void main(String[] args) { Random r = new Random(); int[] counts = new int[6]; // 索引0对应1点,索引1对应2点...索引5对应6点 Scanner input = new Scanner(System.in); System.out.println("How many times would you like the die to roll?: "); int numRoll = input.nextInt(); for (int i=0; i < numRoll; i++) { int rNum = r.nextInt(6) + 1; counts[rNum - 1]++; // 把点数转成数组索引,直接自增对应位置的计数 } // 批量输出统计结果 System.out.println("骰子点数统计结果:"); for (int i=0; i < counts.length; i++) { System.out.println((i+1) + "点出现次数:" + counts[i]); } input.close(); } }
核心修改点说明:
- 移除if后的分号:这是最关键的修复,让条件判断真正控制计数器的自增操作
- 补全dieSix的统计逻辑:原代码里这部分缺失了
- 添加结果输出:原代码只有统计逻辑,没有把结果展示出来
- 数组优化(方案2):用数组替代六个独立变量,减少重复代码,提升可维护性
内容的提问来源于stack exchange,提问作者F. Ryan
相关产品推荐
相关产品推荐

