Рекурсия внутри ActionListener - PullRequest
0 голосов
/ 15 января 2019

Мне нужно добавить add recursion внутри ActionListener, чтобы вычислить последовательность Фибоначчи для заданного числа, я пытался добавить рекурсию таким образом, но это не сработало.

        fibonacci.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                int a = Integer.parseInt(input1.getText());
                if(a == 0)
                    result.setText(String.valueOf("0"));
                else if(a == 1)
                    result.setText(String.valueOf("1"));
                else
                result.setText(String.valueOf(fibonacci(a - 1) + fibonacci(a - 2)));
                } catch (Exception f) {
                JOptionPane.showMessageDialog(rootPane, "ERROR: " + (f.getMessage()));
                }
            String aField = input1.getText();
            if (e.getSource() == fibonacci) {
                if ("".equals(aField)) {
                    String emptyFieldWarning;
                    emptyFieldWarning = "One or more fields is/are empty!";
                    JOptionPane.showMessageDialog(rootPane, emptyFieldWarning);
                }
            }
        }
    });

1 Ответ

0 голосов
/ 15 января 2019

Рекурсия должна происходить в своем собственном методе, ActionListener должна быть инициацией этой рекурсии.

Что-то вроде

fibonacci.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String fibonacciStr = fibonacciRecursion(0, 1, 10);
        }
}

String fibonacciRecursion(int value0, int value1, int depth){
    StringBuilder fibStr = new StringBuilder();
    if(depth > 0){
        fibStr.append(fibonacciRecursion(value1, value0 + value1, depth-1));
    }
    return fibStr;
}

Поскольку вы не упомянули никаких ограничений, параметр глубины подразумевает, что ваша рекурсия может быть остановлена, чтобы избежать SO.

Я не проверял это, но этого должно быть достаточно, чтобы приблизить вас к решению вашего собственного дизайна.

Редактировать

Согласно@ Tom Hawtin - комментарий tackline, это также можно сделать с помощью лямбда-выражения

fibonacci.addActionListener(actionEvent-> 
    System.our.println(fibonacciRecursion(0, 1, 10)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...