【问题标题】:if else statement wont work javaif else 语句不起作用 java
【发布时间】:2014-04-10 02:05:55
【问题描述】:

问题字段应包含 36 个问题,这些问题的答案位于网格中的 36 个按钮上。

当用户选择点击正确的按钮回答按钮被取消网格时,目的是清除网格,使网格为空。

如果用户点击了错误的按钮,游戏会重新开始。

我在添加问题标签时遇到问题。

当用户点击正确的按钮时,问题字段应显示 36 个问题,从 0 + 1 开始 问题 2 在字段中显示 1+1 等到问题 36

我试图通过更改这行代码来实现这一点

 gui.statusLabel.setText("what is 0+ 1" + gui.buttonCounter);

到这里:

 gui.statusLabel.setText("what is " + gui.buttonCounter + "+ 1");

但是虽然选择了正确的答案,但游戏无法正常运行,代码一直说在此代码中执行“else”,即。单击了错误的按钮,重新开始:0+ 1 是什么

    if(clickedNumber == gui.buttonCounter){
        gui.buttonCounter++;
        buttonClicked.setText("");//optional - clears correct selection
        if(gui.buttonCounter > gui.ROWS*gui.COLUMNS) gui.reset();
        gui.statusLabel.setText("what is 0+ 1" + gui.buttonCounter);
    } else {
        gui.reset();
        gui.statusLabel.setText("Incorrect button clicked, start again: what is 0+ 1");
    }

    }
}

我该如何解决这个问题?所以当我点击正确答案按钮时,它会移动到下一个问题并且不显示点击了不正确的按钮,重新开始:什么是 0+ 1。

完整代码

class NewClass {

    final int ROWS = 6;
    final int COLUMNS = 6;
    JButton[] buttons = new JButton[ROWS * COLUMNS];
    JLabel statusLabel = new JLabel("", JLabel.CENTER);
    java.util.List<Integer> buttonNumbers = new ArrayList<Integer>();

    int buttonCounter = 1;

    public NewClass() {
        JPanel buttonPanel = new JPanel(new GridLayout(ROWS, COLUMNS));
        ButtonListener listener = new ButtonListener(NewClass.this);
        for (int x = 0, y = ROWS * COLUMNS; x < y; x++) {
            buttons[x] = new JButton();
            buttons[x].addActionListener(listener);
            buttonPanel.add(buttons[x]);
            buttonNumbers.add(new Integer(x + 1));
        }
        reset();
        JFrame frame = new JFrame();
        frame.getContentPane().add(statusLabel, BorderLayout.NORTH);
        frame.getContentPane().add(buttonPanel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public void reset() {
        Collections.shuffle(buttonNumbers);
        for (int x = 0, y = ROWS * COLUMNS; x < y; x++) {
            buttons[x].setText(String.valueOf(buttonNumbers.get(x)));
        }
        buttonCounter = 1;
        statusLabel.setText("Please click button  " + buttonCounter);
    }

    public static void main(String[] args) {
        new NewClass();
    }

    class ButtonListener implements ActionListener {
        NewClass gui;

        ButtonListener(NewClass g) {
            gui = g;
        }

        public void actionPerformed(ActionEvent e) {
            JButton buttonClicked = (JButton) e.getSource();
            int clickedNumber = Integer.parseInt(buttonClicked.getText());
            if (clickedNumber == gui.buttonCounter) {
                gui.buttonCounter++;
                buttonClicked.setText("");// optional - clears correct selection
                if (gui.buttonCounter > gui.ROWS * gui.COLUMNS)
                    gui.reset();
                // gui.statusLabel.setText("Please click button" +
                // gui.buttonCounter);

                gui.statusLabel.setText("what is " + buttonCounter);

            } else {
                gui.reset();
                gui.statusLabel
                        .setText("Incorrect button clicked, start again: 0 + 1");
            }

        }
    }
}

【问题讨论】:

  • 如果问题是“什么是[按钮计数器] + 1”,为什么条件是 clickedNumber == [按钮计数器]?不会是 clickedNumber == [按钮计数器] + 1 吗?
  • actionPerformed 方法中添加断点并调试它...
  • 我正在添加完整的代码。我确实更改了您的建议,但仍然出现相同的错误。
  • 您确定 clickedNumber 和 gui.buttonCounter 是您的想法吗?您是否按照建议进行了调试?

标签: java swing


【解决方案1】:

所以,从您的 previous question 获取代码并添加

System.out.println("ClickedNumber = " + clickedNumber);
System.out.println("gui.buttonCounter = " + gui.buttonCounter);

进入它询问的actionPerformed 方法...

“什么是 0+1 1”(应该是“什么是 0+1”)。我点击“1”,输出...

ClickedNumber = 1
gui.buttonCounter = 1

所以看看if 声明;

if (clickedNumber == gui.buttonCounter) {

这是true...

然后它问...

“什么是 2+1”。我点击“3”,输出...

ClickedNumber = 3
gui.buttonCounter = 2

所以看看if 声明;

if (clickedNumber == gui.buttonCounter) {

这是false

您的代码中存在逻辑错误。基本上,这取决于您实际上不知道问题是什么......

可运行示例

基本上这是问...

“什么是” + buttonCounter + “+1”?

if 条件下,我们假设buttonCounter0 索引,这意味着我们需要将比较增加1

if (clickedNumber == (gui.buttonCounter + 1)) {

或者您可以将 clickedNumeber 减少 1

if ((clickedNumber - 1) == gui.buttonCounter) {

记住,你的问题总是问“下一个数字是多少”,而不是当前的数字是多少......

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class NewClass {

    final int ROWS = 6;
    final int COLUMNS = 6;
    JButton[] buttons = new JButton[ROWS * COLUMNS];
    JLabel statusLabel = new JLabel("", JLabel.CENTER);
    java.util.List<Integer> buttonNumbers = new ArrayList<Integer>();

    int buttonCounter = 1;

    public NewClass() {
        JPanel buttonPanel = new JPanel(new GridLayout(ROWS, COLUMNS));
        ButtonListener listener = new ButtonListener(NewClass.this);
        for (int x = 0, y = ROWS * COLUMNS; x < y; x++) {
            buttons[x] = new JButton();
            buttons[x].addActionListener(listener);
            buttonPanel.add(buttons[x]);
            buttonNumbers.add(new Integer(x + 1));
        }
        reset();
        JFrame frame = new JFrame();
        frame.getContentPane().add(statusLabel, BorderLayout.NORTH);
        frame.getContentPane().add(buttonPanel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public void reset() {
        Collections.shuffle(buttonNumbers);
        for (int x = 0, y = ROWS * COLUMNS; x < y; x++) {
            buttons[x].setText(String.valueOf(buttonNumbers.get(x)));
        }
        buttonCounter = 0;
        statusLabel.setText("Please click button  " + buttonCounter + "+1");
    }

    public static void main(String[] args) {
        new NewClass();
    }

    class ButtonListener implements ActionListener {

        NewClass gui;

        ButtonListener(NewClass g) {
            gui = g;
        }

        public void actionPerformed(ActionEvent e) {
            JButton buttonClicked = (JButton) e.getSource();
            int clickedNumber = Integer.parseInt(buttonClicked.getText());

            System.out.println("ClickedNumber = " + clickedNumber);
            System.out.println("gui.buttonCounter = " + gui.buttonCounter);
            if (clickedNumber == (gui.buttonCounter + 1)) {
                gui.buttonCounter++;
                buttonClicked.setText("");// optional - clears correct selection
                if (gui.buttonCounter > gui.ROWS * gui.COLUMNS) {
                    gui.reset();
                }
                // gui.statusLabel.setText("Please click button" +
                // gui.buttonCounter);

                gui.statusLabel.setText("what is " + buttonCounter + "+1");

            } else {
                gui.reset();
                gui.statusLabel
                        .setText("Incorrect button clicked, start again: 0 + 1");
            }

        }
    }
}

更新了获胜者条件

if (clickedNumber == (gui.buttonCounter + 1)) {
    if (gui.buttonCounter == (gui.ROWS * gui.COLUMNS) - 1) {
        JOptionPane.showMessageDialog(null, "You Win", "Winner", JOptionPane.INFORMATION_MESSAGE);
    } else {
        gui.buttonCounter++;
        buttonClicked.setText("");// optional - clears correct selection
        if (gui.buttonCounter > gui.ROWS * gui.COLUMNS) {
            gui.reset();
        }
        // gui.statusLabel.setText("Please click button" +
        // gui.buttonCounter);

        gui.statusLabel.setText("what is " + buttonCounter + "+1");
    }
} else {
    gui.reset();
    gui.statusLabel
            .setText("Incorrect button clicked, start again: 0 + 1");
}

【讨论】:

  • 问题是什么?我的英语不是很好,我正在努力。如果你明白我想说什么,请帮助我
  • 您的if 声明无效。第一个问题问“什么是 0+1”,即1,这很有效。第二个问题询问“什么是 2+1”,即 3,但您的 if 语句期待 2,即 gui.buttonCounter 的值是什么。这两个条件之一是错误的,哪一个将归结为您想要实现的目标......
  • 查看更新,我根据我“认为”你正在尝试做的事情做出假设......
  • 除了文本输出之外,您还需要将if 语句更改为更像gui.buttonCounter + 2。更好的主意是实际计算预期答案;)
  • 你知道按钮你认为我可以改变文本样式或添加图像吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多