Java 如果语句不是';t工作不正常

Java 如果语句不是';t工作不正常,java,if-statement,Java,If Statement,我只是在玩弄Java上的按钮,试图简单地创建一个非常简单愚蠢的“Cookie Clicker”版本。然而,listener类中的if语句没有正常工作。 主要类别代码: import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JFrame; public class CookieClickerGame { private

我只是在玩弄Java上的按钮,试图简单地创建一个非常简单愚蠢的“Cookie Clicker”版本。然而,listener类中的if语句没有正常工作。 主要类别代码:

import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class CookieClickerGame {
    private static final int FRAME_WIDTH = 200;
    private static final int FRAME_HEIGHT = 200;

    public static void main(String[] args) {
        JPanel panel = new JPanel();

        JFrame frame = new JFrame();
        JButton cookie = new JButton("Cookie");
        JButton grandma = new JButton("Grandma");
        panel.add(cookie);
        panel.add(grandma);
        frame.add(panel);

        ActionListener listener = new CookieClicker();
        cookie.addActionListener(listener);

        ActionListener listener2 = new CookieClicker();
        grandma.addActionListener(listener2);

        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
侦听器类代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;

public class CookieClicker implements ActionListener {
    int cookies;
    public void actionPerformed(ActionEvent event) {
        if (event.getActionCommand().equals("Cookie")) {
            cookies++;
            System.out.println(cookies + " Cookies");
        } else if (event.getActionCommand().equals("Grandma") && cookies >= 10) {
            System.out.println("+1 Grandma");
        } else {
            JOptionPane.showMessageDialog (null, "Not Enough Cookies", "You're Poor", JOptionPane.INFORMATION_MESSAGE);
        }
    }
}

我的问题是关于
奶奶
部分,没有任何东西会显示出“+1奶奶”,即使我有足够的饼干,它也会告诉我我太穷了。代码有什么问题?

您有两个不同的CookieClicker实例。使用静态成员或让侦听器的操作更新其cookie值


如果您使用后一个选项,您可能有两个独立的类,CookieClicker和GrandmaClicker。然后
CookieClicker.actionPerformed()
可以调用
GrandmaClicker.IncrementCookies()
或类似的函数。

您有两个不同的CookieClicker实例。使用静态成员或让侦听器的操作更新其cookie值

如果您使用后一个选项,您可能有两个独立的类,CookieClicker和GrandmaClicker。然后,
CookieClicker.actionPerformed()
可以调用
GrandmaClicker.IncrementCookies()
或类似功能。

更改:

int cookies;
致:

这样,您的所有对象都只有一个cookies字段,并且每次执行操作时它都会更改。使用第一个或第二个按钮。

更改:

int cookies;
致:


这样,您的所有对象都只有一个cookies字段,并且每次执行操作时它都会更改。使用第一个或第二个按钮。

将Cookie计数器更改为静态:


将Cookie计数器更改为静态:

您正在为按钮创建两个不同的侦听器

单击第一个按钮时,
listener
会收到通知,单击第二个按钮时,
listener2
会收到通知

只需对两个按钮使用相同的侦听器:

ActionListener listener = new CookieClicker();
cookie.addActionListener(listener);

grandma.addActionListener(listener);
您正在为按钮创建两个不同的侦听器

单击第一个按钮时,
listener
会收到通知,单击第二个按钮时,
listener2
会收到通知

只需对两个按钮使用相同的侦听器:

ActionListener listener = new CookieClicker();
cookie.addActionListener(listener);

grandma.addActionListener(listener);

您没有将Cookie初始化为零。另外,正如Paul Hicks提到的,您有两个不同的CookieClicker实例。您没有将Cookie初始化为零。另外,正如Paul Hicks提到的,您有两个不同的CookieClicker实例。
ActionListener listener = new CookieClicker();
cookie.addActionListener(listener);

grandma.addActionListener(listener);