我正在编写一个简单的二十一点程序,我打算随着Java变得更好而扩展。我的课程没有很好地涵盖继承,他们根本不打算讨论子类。
当玩家决定结束游戏时,我想打印出玩家的总筹码数。每当我写print语句时,我都会收到错误:
无法对非静态字段alice进行静态引用。
我不知道Eclipse对非静态字段意味着什么,因为我熟悉的唯一static
是顶级方法。我是否必须创建一个名为Player
的完全独立的类来进行引用?
我附上了一段与子类和整个main方法有关的代码。此外,这是一个个人项目,而不是家庭作业,以帮助建立我的投资组合,所以任何其他你认为值得的建议,我欢迎。谢谢你的帮助。
public class BlackJack
{
public class Player extends BlackJack
{
public int wallet;
private int hand;
public Player(int playerHand, int playerWallet)
{
wallet = playerWallet;
hand = playerHand;
}
public int getWallet()
{ return wallet; }
}
Player alice = new Player(0, 250);
public static void main(String[] args)
{
System.out.println("Welcome to Black Jack. Type begin to get started.");
String begin = "begin";
String end = "end";
Scanner keyboard = new Scanner(System.in);
while (!keyboard.equals(end))
{
}
System.out.println("You walked away with $" + alice.getWallet() + ". Thanks for playing!");
}
}
答案 0 :(得分:2)
您的变量alice
正在main()
中使用,这是静态的,main()
在对象内不“存在”,但您的变量alice
必须在内部一。对代码执行此更改以在对象内部执行非静态方法run()
(运行与main具有相同的代码,它只是更改为非静态方法):
public static void main(String[] args) {
new BlackJack().run(args);
}
public void run(String[] args) {
System.out.println("Welcome to Black Jack. Type begin to get started.");
String begin = "begin";
String end = "end";
Scanner keyboard = new Scanner(System.in);
while (!keyboard.equals(end))
{
}
System.out.println("You walked away with $" + alice.getWallet() + ". Thanks for playing!");
}
答案 1 :(得分:0)
您的alice变量声明为非静态,但正在静态main方法中使用,禁止使用。有些人可能会建议您将alice作为静态变量,但我建议不要这样做。相反,考虑让你的主要方法非常短 - 只需要启动和运行程序,并有另一个类,也许是一个游戏类,一个非静态方法和字段,实际上运行游戏。 main方法将创建一个Game实例,然后在这个Game实例上调用一个方法让它启动整个游戏。
顺便说一句,我看不出你想如何让Player扩展BlackJack类,因为Player的概念不是一个更专业的“BlackJack”概念,无论可能是什么。
答案 2 :(得分:0)
您的变量alice
声明时没有static
修饰符。这意味着只有在实例化包含类的实例时才能使用此对象。
但是,您在alice.getWallet()
方法中使用public static void main()
,即static
。由于static意味着可以在不创建封闭类的对象的情况下调用此方法,这意味着该方法将尝试访问无法访问的非静态对象alice
。
如果你将alice
设为静态,它就会起作用。
更好的方法是让您的程序以main()
方法开始,然后转到非静态Game
类或类似的类。没有使用静态修饰符的麻烦。
答案 3 :(得分:0)
在主方法中移动Player alice = new Player(0, 250);
!