我几乎让这个Java程序按预期工作100%,但我的toString方法导致整个系统崩溃......显然。以下是两段似乎有冲突的代码。
public class Main
{
public static void main()
{
Ground ground = new Ground();
ground.play();
}
}
这是主要功能。相当基本的东西。这是播放功能:
public void play()
{
int i = 0;
System.out.println(Ground.toString());
while(i < 100 && isChestUnlocked() == false)
{
turn();
System.out.println(Ground.toString());
++i;
}
System.out.print("You unlocked the treasure!");
}
当我尝试像这样使用它时,bluej向我吐出假人并声称toString不能在静态上下文中引用。我怎样才能解决这个问题?感觉就像其中一个“两个字符是错误的”问题,它让我疯狂。
编辑:如果我将Ground.toStrings更改为ground.toStrings,它声称它找不到变量地。
编辑编辑:虽然我发誓它以前没有用,但显然this.toStrings现在有效。感谢棘手!答案 0 :(得分:7)
删除Ground
或替换为此。
public void play()
{
int i = 0;
System.out.println(this.toString());
while(i < 100 && isChestUnlocked() == false)
{
turn();
System.out.println(this.toString());
++i;
}
System.out.print("You unlocked the treasure!");
}
Ground
表示类,而this
是运行该方法的当前对象。
事实上,只做System.out.println(this);
也可以。 System.out
的{{3}}重载将在传入的对象上调用toString
。
答案 1 :(得分:3)
System.out.println(Ground.toString());
这会在类上调用toString()
而不是对象,这需要一个可能不存在的静态toString()
。
您需要将Ground.toString()
的所有实例更改为this.toString()
或简单地toString()
,引用实例而不是类。