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
相关产品推荐
相关产品推荐

