【问题标题】:Printing a score counter in greenfoot. Outputting zero在 greenfoot 中打印分数计数器。输出零
【发布时间】:2015-02-16 07:14:25
【问题描述】:

我正在尝试在 greenfoot IDE 中输出分数,并且一切正常(分数正在增加),直到我尝试打印它。当我尝试打印它时,由于某种原因它变为零。

蟹类:

public class Crab extends Animal
{
    int health = 10;
    int score = 0;
    public void act()
    {
        score = score + 1;
        System.out.println(score);
        //JOptionPane.showMessageDialog(null, newscore, "You lose!", JOptionPane.WARNING_MESSAGE);
        if (Greenfoot.isKeyDown("Left"))
        {
            turn(-3);
        }
        if (Greenfoot.isKeyDown("Right"))
        {
            turn(3);
        }
        if (canSee(Worm.class))
        {
            eat(Worm.class);
        }
        move();
        healthBar();
    }
    public void healthBar()
    {
        if (atWorldEdge())
        {
            Greenfoot.playSound("pew.wav");
            move(-20);
            turn(180);
            health = health - 1;
        }
        if (health <= 0)
        {
            Message msgObject = new Message();
            msgObject.youLose();
            Greenfoot.stop();
        }
    }
}

消息类:

public class Message extends Crab
{
    /**
     * Act - do whatever the Message wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void youLose() 
    {
        JOptionPane.showMessageDialog(null, "Try again next time. Your score was  " + score, "You lose!", JOptionPane.WARNING_MESSAGE);
    }    
}

在 act 方法中,当我尝试打印分数时,它显示分数在增加,但是当我使用 JOptionPane 或在程序结束时正常打印时,它给了我 0。

例子:

http://i.imgur.com/St0HARX.png

【问题讨论】:

    标签: java greenfoot


    【解决方案1】:

    您正在创建一个全新的对象来调用您的youLose() 方法。通过这样做,您的分数计数器将再次设置为零。您可以尝试通过为 Message 创建一个允许传递分数的新构造函数来解决此问题。

    public Message(int score) {
        this.score = score;
    }
    

    PS:我不明白为什么让你的 Message 类继承自 Crab 会有用

    【讨论】:

    • 我的消息类从 Crab 继承,因为这是我的消息类可以获得分数变量的唯一方法......我想。那么我在哪里添加该代码?
    • 构造函数属于消息类,但你应该知道还有一些其他(更好的)方法可以做你想做的事。现在,您必须创建一个完整的新对象,其中包含您实际上几乎不使用的字段。您总是可以使用字段分数创建一个完整的新类消息,并且您会得到相同的结果。更好的办法是将youLose() 方法设为静态并将score 作为参数传递。 (顺便说一句,这些不是唯一的方法)
    • 错误是因为您必须将变量 score 传递给构造函数。您已通过添加新构造函数隐藏了默认构造函数,因此您需要将 new Message() 更改为 new Message(score)。 PS:不要忘记将有用的答案标记为已接受
    • 如果我将 youLose 方法设为静态并将分数作为参数传递,我会收到此错误:i.imgur.com/h4DL9qk.png。如果我将 Message() 更改为 Message(score),我必须在创建和使用 youLose 对象的类中进行。此类无法获取分数变量。 i.imgur.com/cr7n7Xz.png。对不起,如果这没有多大意义。
    • 这不是家庭作业,这只是我正在做的帮助我学习的东西。谢谢。
    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多