如何避免在Java方法间反复传递dineros和rep变量?
优化文字冒险游戏的状态传递问题
你现在的问题根源在于把游戏核心状态(金钱、声望)放在了main方法的局部变量里,导致每次调用方法都要手动传递。最直接的解决方式是把这两个变量变成类的成员变量,让所有实例方法可以直接访问,不用反复传参。
具体实现步骤:
- 将状态变量转为类成员
在ACRE类中定义dineros和rep作为实例变量,替代main里的局部变量。 - 修改方法,移除冗余参数
startTrain和printStats不再需要接收这两个变量作为参数,直接使用类内的成员变量即可。 - 调整初始化逻辑
在main方法中创建ACRE实例后,直接给成员变量赋值完成初始化。
修改后的完整代码:
public class ACRE { // 把游戏核心状态定义为类的成员变量 private int dineros; private int rep; private char optionKey; public static void main(String[] args) { ACRE game = new ACRE(); // 初始化游戏初始状态 game.dineros = 1500; game.rep = 100; game.optionKey = '0'; game.startTrain(); } /** * 游戏起始流程 */ public void startTrain() { printStats(); System.out.print("你在火车上。要不要下车?相关剧情内容"); // 编写选项交互逻辑 } /** * 打印当前金钱与声望状态 */ public void printStats() { System.out.print("金钱: " + dineros + "D"); System.out.print(" * "); System.out.print("声望: " + rep + "\n"); } }
额外优化建议:
- 可以给成员变量添加
getter/setter方法(比如getDineros()、setRep(int newRep)),遵循面向对象的封装原则,避免直接修改成员变量。 - 如果后续游戏状态增多(比如体力、道具等),可以单独创建
GameState类统一管理所有状态,让ACRE类专注于游戏流程控制,代码结构会更清晰。
内容的提问来源于stack exchange,提问作者gmr
相关产品推荐
相关产品推荐

