我正在尝试编写一个程序,用户可以在其中输入格式
A?B:C?(X-1):D?(Y-3):(Z*3)
然后代码将指导用户完成一系列是/否问题,以确定在某些情况下将返回什么。
我写了一个findTrue
代码,它将提取这种公式的真实部分。我希望我的yesListener
的操作提出另一个问题,如果用户输入的true
部分中有更多问号。如果没有,它将返回答案。
ActionListener yesListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String formula = textArea.getText();
int i = StringUtils.countMatches(formula, "?");
if (i>1) {
String newFormula = "";
newFormula = findTrue(formula);
questionLabel.setText(askQuestion(newFormula));
}
else {questionLabel.setText("The formula will return" + findTrue(formula));}
}};
第一次运行代码可以正常工作,但是第二次从原始输入中再次运行getText()。因此,我认为最好的方法是将字符串传递给actionPerformed
而不是在内部求值。但是,我对Java还是很陌生,我正努力查看如何实现这一目标。
答案 0 :(得分:0)
U无法直接将参数传递给匿名函数。 但是此链接可能会帮助您做到这一点 how-to-pass-parameters-to-anonymous-class
答案 1 :(得分:0)
据我了解,您的ActionListener
是在某个类的范围内创建的。很难提出一种最好的方式来重构代码,而又不会看到类的全部代码。
但是要实现您的目标,您可以将getText()
的原始值保存在类实例字段中,然后在每次新侦听器调用中对其进行更新:
public class Main {
private String formula;
ActionListener yesListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (formula == null) {
formula = textArea.getText();
}
int i = StringUtils.countMatches(formula, "?");
if (i > 1) {
formula = findTrue(formula);
questionLabel.setText(askQuestion(formula));
} else {
questionLabel.setText("The formula will return" + findTrue(formula));
}
}
};