Как исправить ошибку возвращаемого значения функции рекурсии * 2 - PullRequest
0 голосов
/ 27 октября 2019

Я бы хотел исправить возвращаемое значение моей функции recurion. Я установил его на -1, но когда я увидел значение, оно уменьшается как (если первое значение равно 4, оно уменьшается как 4 3 1 -3, я бы хотел исправить это 4 3 2 1).

Iизменил мое возвращаемое значение, и я использовал 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

1 Ответ

1 голос
/ 27 октября 2019

Вы добавляете нового слушателя при каждом вызове buttonposition. Каждый из этих слушателей уменьшает remainingchance при нажатии. Поэтому происходит следующее:

  1. Звонок с main(...). Кнопка имеет 1 слушатель. remainingchance = 4
  2. Первый щелчок: у кнопки 2 слушателя. remainingchance = 3
  3. Второй щелчок: у кнопки 4 слушателя. remainingchance = 1
  4. Третий щелчок: у кнопки 8 слушателей. remainingchance = -3

Чтобы решить эту проблему, вы должны сначала добавить слушателя, а не внутри функции buttonposition.

Кстати: функция на самом деле не рекурсивная. Слушатель, который содержит вызов buttonposition, не вызывается из buttonposition. Вы только говорите кнопке, что делать, когда она нажата.

...