Как я могу исправить свой код для игры Rock, Paper, Scissor GUI? - PullRequest
0 голосов
/ 08 февраля 2020

Я довольно новичок в Java программировании, и я хочу попробовать создать приложение GUI, и сейчас я застрял в механике операторов if / else. Пока что все работает, кроме механики «Рок Бет» и «Бумага Бет». Я протестировал Scissor Bet и все работает.

Проблема здесь в том, что всякий раз, когда компьютер отображает его, он выбирает и запускает оператор if / else, вердикт всегда неверен. Почему «каменная ставка» и «бумажная ставка» отличаются от «ножничного»?

(я пытался разместить «ножную ставку», если механика выписки сверху, перед «камнем и бумагой», если / else утверждение и каким-то образом вердикт стал неправильным. Неправильно ли оформлен мой заказ?)

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class gameRPS extends JFrame {
    private JPanel mainPanel;
    private JLabel textLabel1;
    private JButton rockButton;
    private JButton paperButton;
    private JButton scissorButton;
    private JLabel textLabel2;
    private JLabel computersLabel;
    private JLabel userBet;
    private JButton enterButton;
    private JLabel verdictLabel;

    public gameRPS(String title) {
        super(title);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(mainPanel);
        this.pack();

        rockButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                userBet.setText("YOU PICKED: ROCK!");
            }
        });
        paperButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                userBet.setText("YOU PICKED: PAPER!");
            }
        });
        scissorButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                userBet.setText("YOU PICKED: SCISSOR!");
            }
        });

        String[] rpsChoices = {"ROCK!", "PAPER!", "SCISSOR!"};
        Random rand = new Random();
        int computerBet = rand.nextInt(rpsChoices.length);

        enterButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {

                String computersChoice = rpsChoices[computerBet];
                String userBetRock = "ROCK!";
                String userBetPaper = "PAPER!";
                String userBetScissor = "SCISSOR!";

                computersLabel.setText(computersChoice); //Displays the Computer's Choice

        //Mechanics for the Rock Bet
                if (userBetRock == "ROCK!" && computersChoice.equals("ROCK!")) {
                    verdictLabel.setText("DRAW");
                }
                else if (userBetRock == "ROCK!" && computersChoice.equals("PAPER!")) {
                    verdictLabel.setText("YOU LOSE");
                }
                else if (userBetRock == "ROCK!" && computersChoice.equals("SCISSOR!")) {
                    verdictLabel.setText("YOU WIN");
                }
        //Mechanics for the Paper Bet
                if (userBetPaper == "PAPER!" && computersChoice.equals("PAPER!")) {
                    verdictLabel.setText("DRAW");
                }
                else if (userBetPaper == "PAPER!" && computersChoice.equals("ROCK!")) {
                    verdictLabel.setText("YOU WIN");
                }
                else if (userBetPaper == "PAPER!" && computersChoice.equals("SCISSOR!")) {
                    verdictLabel.setText("YOU LOSE");
                }
        //Mechanics for the Scissor Bet (WORKING)
                if (userBetScissor == "SCISSOR!" && computersChoice.equals("SCISSOR!")) {
                    verdictLabel.setText("DRAW");
                }
                else if (userBetScissor == "SCISSOR!" && computersChoice.equals("ROCK!")) {
                    verdictLabel.setText("YOU LOSE");
                }
                else if (userBetScissor == "SCISSOR!" && computersChoice.equals("PAPER!")) {
                    verdictLabel.setText("YOU WIN");
                }
            }
        });

    }
    public static void main(String[] args) {
        JFrame frame = new gameRPS("Rock Paper Scissors!");
        frame.setSize(300,320);
        frame.setResizable(true);
        frame.setVisible(true);

    }
}

1 Ответ

1 голос
/ 08 февраля 2020

В Java вы не можете проверить равенство строк с помощью ==, как вы делаете здесь:

if (userBetPaper == "PAPER!" && ...) ...

и во всех остальных if, вместо этого вы должны делать, как вы делать во втором условии if, используя .equals():

if (userBetPaper.equals("PAPER!") && ...) ...

Однако я думаю, что в том, что вы делаете, есть ошибка logi c, например

String userBetRock = "ROCK!";
...
if (userBetRock == "ROCK!" &&...)...

всегда верно, вы никогда не меняете его, а также вы никогда не используете пользовательский ввод: например, на ActionEvent слушателе кнопок вы можете сохранить в String внутри вашего класса то, что у него есть выберите, а затем в обработчике действий enterButton проверьте, что String содержит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...