Java ActionListener中的递归
我必须在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
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效率更高。我应该在代码中做得更好。