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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:48