如何在Game类中调用Method类方法?值输出问题求助
解决Game类调用methodOne后无法输出数值的问题
嘿,我看你碰到了在Game类输入数字1调用Method的methodOne方法后,没法正常输出对应数值的问题,这就帮你梳理下可能的原因,再给你具体的修复方案!
首先,从你给出的代码片段来看,Method类里的Str, Dex, Con, Int, Wis, Cha是private static修饰的属性——这意味着如果methodOne方法没有正确处理这些值的暴露逻辑,Game类就算调用了方法,也拿不到或者没法输出这些数值。咱们一步步来搞定:
第一步:补全Method类的methodOne方法
首先得确保methodOne方法正确初始化这些属性值,并且提供获取/输出这些值的途径。这里我假设你是要生成RPG角色属性(比如DND那种),给你补全一个完整的实现:
import java.util.Scanner; import java.util.Random; import java.util.Arrays; public class Method { private static int Str, Dex, Con, Int, Wis, Cha; static Scanner sc = new Scanner(System.in); private static Random random = new Random(); // 补全methodOne方法:生成属性值,同时支持内部输出或外部获取 public static void methodOne() { // 用4d6取前3高的方式生成属性值(经典RPG规则) Str = rollAbilityScore(); Dex = rollAbilityScore(); Con = rollAbilityScore(); Int = rollAbilityScore(); Wis = rollAbilityScore(); Cha = rollAbilityScore(); } // 辅助方法:生成单个属性的数值 private static int rollAbilityScore() { int[] rolls = new int[4]; for (int i = 0; i < 4; i++) { rolls[i] = random.nextInt(6) + 1; } Arrays.sort(rolls); return rolls[1] + rolls[2] + rolls[3]; } // 给每个属性添加public getter方法,让Game类可以获取数值 public static int getStr() { return Str; } public static int getDex() { return Dex; } public static int getCon() { return Con; } public static int getInt() { return Int; } public static int getWis() { return Wis; } public static int getCha() { return Cha; } // 也可以加一个直接输出所有属性的方法,按需使用 public static void printAbilityScores() { System.out.println("=== 生成的角色属性 ==="); System.out.println("力量(Str): " + Str); System.out.println("敏捷(Dex): " + Dex); System.out.println("体质(Con): " + Con); System.out.println("智力(Int): " + Int); System.out.println("感知(Wis): " + Wis); System.out.println("魅力(Cha): " + Cha); } }
第二步:修改Game类,正确调用并输出数值
现在Game类里,当用户输入1时,调用methodOne后,你有两种输出方式可选:
方式1:调用Method类的现成输出方法
如果不想自己写输出格式,直接用Method里的printAbilityScores():
import java.util.Scanner; public class Game { public static void main(String[] args) { Scanner gameScanner = new Scanner(System.in); System.out.println("请输入操作数字:1=生成角色属性"); int choice = gameScanner.nextInt(); if (choice == 1) { Method.methodOne(); // 先生成属性值 Method.printAbilityScores(); // 直接输出 } gameScanner.close(); } }
方式2:在Game类中自定义输出格式
如果想自己控制输出的样式,就用getter方法获取每个属性值后输出:
import java.util.Scanner; public class Game { public static void main(String[] args) { Scanner gameScanner = new Scanner(System.in); System.out.println("请输入操作数字:1=生成角色属性"); int choice = gameScanner.nextInt(); if (choice == 1) { Method.methodOne(); // 先生成属性值 // 自定义输出格式 System.out.println("\n--- 你的角色属性面板 ---"); System.out.printf("力量: %3d | 敏捷: %3d | 体质: %3d\n", Method.getStr(), Method.getDex(), Method.getCon()); System.out.printf("智力: %3d | 感知: %3d | 魅力: %3d\n", Method.getInt(), Method.getWis(), Method.getCha()); } gameScanner.close(); } }
常见问题排查
- 如果之前你的methodOne没有给
Str等属性赋值,输出的会是int的默认值0,所以一定要确保在methodOne里完成属性初始化。 - 因为属性是
private的,Game类不能直接访问Method.Str,必须通过getter方法或者Method类内部的输出方法来获取数值。 - 可以给输入环节加个异常捕获,避免用户输入非整数导致程序崩溃,比如用
try-catch包裹nextInt()。
这样调整后,你应该就能正常输出methodOne生成的数值啦!
内容的提问来源于stack exchange,提问作者DDSasikala
相关产品推荐
相关产品推荐

