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

Java静态方法中如何使用变量?main方法相关问题咨询

解决静态方法中访问变量的问题

嘿,我来帮你理清这个问题!你代码里的报错核心原因很明确:静态方法不能直接访问类中的非静态成员变量。你的input是一个没有static修饰的实例变量,而startGame()是静态方法——静态方法属于类本身,调用时不需要创建类的实例,所以它没法直接访问属于实例的非静态成员。下面给你三种可行的解决办法:

方法一:将Scanner改为静态成员变量

把input也加上static修饰,让它成为类的静态成员,这样静态方法就能直接访问它了:

import java.util.Scanner;
public class Yatzy {
    // 给Scanner添加static修饰符
    static Scanner input = new Scanner(System.in);
    protected static int reply;

    public static void main(String[] args){
        startGame();
    }

    public static void startGame(){
        System.out.println("How many players? 1 - 3.");
        reply = input.nextInt(); // 现在可以正常调用
        int userinput = input.nextInt(); // 这个也能正常运行
    }
}

方法二:在静态方法内部创建Scanner实例

不需要修改类成员,直接在静态方法里实例化Scanner,用局部变量来操作:

import java.util.Scanner;
public class Yatzy {
    protected static int reply;

    public static void main(String[] args){
        startGame();
    }

    public static void startGame(){
        System.out.println("How many players? 1 - 3.");
        // 在方法内部创建Scanner对象
        Scanner input = new Scanner(System.in);
        reply = input.nextInt();
        int userinput = input.nextInt();
    }
}

这种方式更灵活,避免了静态成员可能带来的全局状态问题,适合简单场景。

方法三:改用实例方法(更符合面向对象设计)

如果你的游戏逻辑后续会更复杂,建议把startGame()改成非静态的实例方法,然后在main里创建Yatzy类的实例来调用它:

import java.util.Scanner;
public class Yatzy {
    Scanner input = new Scanner(System.in);
    protected int reply; // 也可以去掉static,转为实例变量

    public static void main(String[] args){
        // 创建Yatzy类的实例
        Yatzy game = new Yatzy();
        game.startGame();
    }

    // 去掉static,改为实例方法
    public void startGame(){
        System.out.println("How many players? 1 - 3.");
        reply = input.nextInt();
        int userinput = input.nextInt();
    }
}

这种方式更贴合面向对象的思想,游戏的状态和行为都属于具体的游戏实例,后续扩展功能会更方便。

内容的提问来源于stack exchange,提问作者Jouni Kouvo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:26