Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaGUI可重复进程_Java_User Interface_Loops_Process - Fatal编程技术网

JavaGUI可重复进程

JavaGUI可重复进程,java,user-interface,loops,process,Java,User Interface,Loops,Process,我最近开始学习Java,我决定构建一个迷你石头剪刀游戏。虽然,我认为它是工作,但糟糕的设计,它仍然有一个小问题。我似乎不知道如何使整个过程可重复,因为我必须重新启动程序,以便计算机可以再次在石头、布或剪刀之间进行选择。这是我的代码: public class Panel extends JPanel implements ActionListener { int randomNum = new Random().nextInt(3) + 1; String AIGuess;

我最近开始学习Java,我决定构建一个迷你石头剪刀游戏。虽然,我认为它是工作,但糟糕的设计,它仍然有一个小问题。我似乎不知道如何使整个过程可重复,因为我必须重新启动程序,以便计算机可以再次在石头、布或剪刀之间进行选择。这是我的代码:

public class Panel extends JPanel implements ActionListener {

    int randomNum = new Random().nextInt(3) + 1;

    String AIGuess;
    String myGuess;

    boolean playAgain = true;

    JButton rock = new JButton("Rock");
    JButton paper = new JButton("Paper");
    JButton scissors = new JButton("Scissors");

    JLabel AIGuessDisplay = new JLabel(AIGuess);

    public Panel() {
        setLayout(new FlowLayout());
        add(rock);
        rock.addActionListener(
                  new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            myGuess = "Rock";
                            if (randomNum == 1) {
                                AIGuess = "Rock";
                                JOptionPane.showMessageDialog(null, "Tie");
                            }
                            if (randomNum == 2) {
                                AIGuess = "Paper";
                                JOptionPane.showMessageDialog(null, "You Lose");
                            }
                            if (randomNum == 3) {
                                AIGuess = "Scissors";
                                JOptionPane.showMessageDialog(null, "You Win");
                            }
                        }
                      }
                    );
        add(paper);
        paper.addActionListener(
                  new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            myGuess = "Paper";
                            if (randomNum == 1) {
                                AIGuess = "Rock";
                                JOptionPane.showMessageDialog(null, "You Win");
                            }
                            if (randomNum == 2) {
                                AIGuess = "Paper";
                                JOptionPane.showMessageDialog(null, "Tie");
                            }
                            if (randomNum == 3) {
                                AIGuess = "Scissors";
                                JOptionPane.showMessageDialog(null, "You Lose");
                            }
                        }
                      }
                    );

        add(scissors);
        scissors.addActionListener(
                  new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            myGuess = "Scissors";
                            if (randomNum == 1) {
                                AIGuess = "Rock";
                                JOptionPane.showMessageDialog(null, "You Lose");
                            }
                            if (randomNum == 2) {
                                AIGuess = "Paper";
                                JOptionPane.showMessageDialog(null, "You Win");
                            }
                            if (randomNum == 3) {
                                AIGuess = "Scissors";
                                JOptionPane.showMessageDialog(null, "Tie");
                            }
                        }
                      }
                    );
        add(AIGuessDisplay);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }   
}

您的问题缺少
main
和面板设置,但基本上,您似乎只在声明时为
randomNum
赋值一次

因此,
randomNum
不会改变,因此计算机选择将始终相同

因此,您应该添加一个方法,例如
newComputerSelection()
,它将在
randomNum
中放置一个新的随机数。在做决定之前,从你的行动听众那里调用这个方法

事实上,您甚至不必将
randomNum
作为字段。您只需在该方法中获得一个新的随机数,并立即根据它决定
AIGuess
将是什么,而不是在每个动作侦听器中决定。在action listeners中,您只需将用户的选择与
AIGuess
进行比较,然后决定是赢、输还是平


下一步是消除
AIGuess
,只需从
newcommputerselection
方法返回它的值。您可以做更多的改进,但基本上,您需要在每个新回合更改计算机选择

您的问题缺少
和面板设置,但基本上,您似乎只在声明时为
随机数
分配一次值

因此,
randomNum
不会改变,因此计算机选择将始终相同

因此,您应该添加一个方法,例如
newComputerSelection()
,它将在
randomNum
中放置一个新的随机数。在做决定之前,从你的行动听众那里调用这个方法

事实上,您甚至不必将
randomNum
作为字段。您只需在该方法中获得一个新的随机数,并立即根据它决定
AIGuess
将是什么,而不是在每个动作侦听器中决定。在action listeners中,您只需将用户的选择与
AIGuess
进行比较,然后决定是赢、输还是平


下一步是消除
AIGuess
,只需从
newcommputerselection
方法返回它的值。您可以做更多的改进,但基本上,您需要在每次新回合更改计算机选择

如果您真的不想重新启动程序以便能够再次播放,您可以在
添加(AIGuessDisplay)下方的代码中添加新的JButton

该按钮将为randomNum生成一个新值

如果您不喜欢添加新的JButton,另一个改进程序的选项是添加代码
randomNum=newrandom().nextInt(3)+1中按如下所示执行每个操作,以便每次单击任何按钮(岩石、纸张或剪刀)时,randomNum都会有一个新值

new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        randomNum = new Random().nextInt(3) + 1;

但是这种修改现在与您的程序最初的工作方式不同。

如果您真的不想重新启动程序以便能够再次播放,您可以在
add(AIGuessDisplay)下面的代码中添加一个新的JButton

该按钮将为randomNum生成一个新值

如果您不喜欢添加新的JButton,另一个改进程序的选项是添加代码
randomNum=newrandom().nextInt(3)+1中按如下所示执行每个操作,以便每次单击任何按钮(岩石、纸张或剪刀)时,randomNum都会有一个新值

new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        randomNum = new Random().nextInt(3) + 1;

但是现在这种修改与您的程序最初的工作方式不同。

旁注:如果您正在学习使用Java进行GUI编程,我建议您使用JavaFX而不是Swing,由于Swing目前处于维护模式,JavaFX是指定的继任者。旁注:如果您正在学习使用Java进行GUI编程,我建议使用JavaFX而不是Swing,由于Swing目前处于维护模式,JavaFX是指定的继任者。我没有想到这一点,我无法相信答案如此简单。非常感谢。我没有想到我不敢相信答案这么简单。非常感谢。