猿问

将参数传递给动作监听器

背景

我正在尝试编写一个程序,其中用户输入格式公式


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 还是很陌生,我正在努力了解如何实现这一点。


达令说
浏览 80回答 1
1回答

GCT1015

据我了解,您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));            }        }    };
随时随地看视频慕课网APP

相关分类

Java
我要回答