You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:35:38