如何修复递归函数的返回值* 2错误

问题描述 投票:-1回答:1

我想修复我的递归函数的返回值。我将其设置为-1,但是当我看到值时,它会下降(如果第一个值为4,则它会下降,例如4 3 1 -3我想修复它4 3 2 1)。

我更改了返回值,并使用了thread.sleep。我是编程的超级新手,所以我找不到为什么会这样。

static int remaningchance=Integer.parseInt(JOptionPane.showInputDialog("how many times will you play?"));

public static void main(String[] args) {
    ...
    buttonposition(remaningchance);
    ...
}

private static void buttonposition(int omg) {
    if(omg<0) {
        button.setVisible(false);
    }else {
        double rd= Math.random();
        int lx=(int)(rd*boxwidth);
        rd= Math.random();
        int ly=(int)(rd*(boxheight-bs));
        button.setBounds(lx,ly,bs,bs);
        frame.add(but);
        label.setBounds(0, 0, 200, 100);;
        frame.add(label);
        label.setVisible(true);
        frame.setLayout(null);
        frame.setVisible(true);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                remaningchance--;
                label.setText(remaningchance+"chance left");
                buttonposition(remaningchance);
            }
        });
    }

} 

我预计留任率会像4 3 2 1一样下降,但会像4 3 1 -3一样下降

java recursion jbutton
1个回答
1
投票

您在每次buttonposition的呼叫中添加一个新的侦听器。这些监听器中的每一个在单击时都会减小remainingchance。因此发生以下情况:

  1. main(...)呼叫。 Button具有1个侦听器。 remainingchance = 4
  2. 首次点击:按钮有2个监听器。 remainingchance = 3
  3. 第二单击:按钮具有4个侦听器。 remainingchance = 1
  4. 三次单击:按钮具有8个侦听器。 remainingchance = -3

要解决该问题,您应该首先添加侦听器,而不是在buttonposition函数内部。

顺便说一句:该函数实际上不是递归的。未从buttonposition内部调用包含对buttonposition的调用的侦听器。单击按钮后,您只需告诉按钮该怎么做。

© www.soinside.com 2019 - 2024. All rights reserved.