我想修复我的递归函数的返回值。我将其设置为-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一样下降
您在每次buttonposition
的呼叫中添加一个新的侦听器。这些监听器中的每一个在单击时都会减小remainingchance
。因此发生以下情况:
main(...)
呼叫。 Button具有1个侦听器。 remainingchance = 4
remainingchance = 3
remainingchance = 1
remainingchance = -3
要解决该问题,您应该首先添加侦听器,而不是在buttonposition
函数内部。
顺便说一句:该函数实际上不是递归的。未从buttonposition
内部调用包含对buttonposition
的调用的侦听器。单击按钮后,您只需告诉按钮该怎么做。