Java ActionListener中的递归

Java ActionListener中的递归,java,swing,math,awt,Java,Swing,Math,Awt,我必须在ActionListener中添加递归来计算给定数字的斐波那契序列,我曾尝试以这种方式添加递归,但没有成功 fibonacci.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { int a = Integer.parseInt(inp

我必须在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);
                }
            }
        }
    });

递归应该发生在它自己的方法中,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;
}
因为您没有提到任何限制,所以depth参数的意思是让您的递归有一种停止的方式,以避免出现so

我还没有对此进行测试,但它应该足以让您更接近自己设计的解决方案

编辑

根据@Tom Hawtin-tackline的评论,这也可以通过lambda表达式实现

fibonacci.addActionListener(actionEvent-> 
    System.our.println(fibonacciRecursion(0, 1, 10)));

StringBuilder的使用不是很好。对于ActionListener,也可以使用lambda而不是匿名内部类。方法引用不起作用,因为事件参数不起作用。@TomHawtin提出了一些很好的建议,我认为字符串也能起作用,但听说StringBuilder效率更高。我应该在代码中做得更好。