toString阻止我的主要

时间:2015-05-29 11:46:42

标签: java

我几乎让这个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现在有效。感谢棘手!

2 个答案:

答案 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(),引用实例而不是类。