Java骰子程序:调用rollDie方法时如何无需传入已定义的sides参数?
解决方案
核心修改点
- 移除
rollDie方法的sides参数,直接使用对象实例中存储的sides值 - 将
Random对象提升为类成员变量,避免每次掷骰都创建新实例,提升性能 - 对成员变量做封装,将
sides设为private,符合面向对象的封装原则(可选但推荐)
修改后的代码
Dice.java
import java.util.Random; public class Dice { private int sides; private final Random random; // 类成员级别的Random实例 // 构造方法初始化面数和Random对象 public Dice(int sides) { this.sides = sides; this.random = new Random(); } // 无参数的rollDie方法,使用对象自身的sides值 public int rollDie() { // nextInt(sides)生成0到sides-1的随机数,加1后变成1到sides的范围 return random.nextInt(sides) + 1; } // 可选:获取当前骰子面数的getter方法 public int getSides() { return sides; } }
Main.java
public class Main { public static void main(String[] args) { Dice d6 = new Dice(6); // 如果需要查看面数,用getter方法 System.out.println(d6.getSides()); // 调用无参数的rollDie方法 System.out.println(d6.rollDie()); } }
关键说明
- 原代码中
random.nextInt(sides + 1) + 1会生成1到sides+1的随机数,属于逻辑错误,正确写法是random.nextInt(sides) + 1,才能得到1到sides的合法掷骰结果 - 把
Random设为类成员,避免每次调用rollDie都创建新的Random实例,减少不必要的对象开销 - 封装
sides为private,防止外部直接修改,保证骰子面数的一致性
内容的提问来源于stack exchange,提问作者HermitIX
相关产品推荐
相关产品推荐

