有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ActionListener代理wierd

我对我的ActionListener有一个问题,我认为他们不应该这样做。我有以下代码:

textField.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
             final String text = textField.getText();
             if (text.toLowerCase().replaceAll("'", "").contains("whats new")){
                 textArea.setText("Oh, you know...work...college. I am a computer science major and software engineer.\nDo you program?");
                 if (text.toLowerCase().replaceAll("'", "").contains("yes")){
                     textArea.setText("Cool!");
                 }else{
                     textArea.setText(":(");
                 }
             }
          }
        });

textField是用户键入问题的地方,textArea是程序回答问题的地方。 问题是,当我输入“Whatsnew”,然后输入“yes”时,当它不理解时,它会给我设置的默认字符串


共 (2) 个答案

  1. # 1 楼答案

    你没有从第四维度思考!(开玩笑吧)

    你试图在你的听众中一次处理一系列事件,但实际上你的听众会被多次呼叫:一次是为了回答第一个问题,另一次是为了回答你的后续评论

    你需要让你的听众独立处理这两种状态。你可能需要在类范围内捕捉上一个问题的状态,并在听者中检查它,以确定问了什么问题,这样你就知道如何评估text的内容并给出正确的回答

    在接下来的几个学期里,你可能不会学习有限自动机,也不会正式学习状态机,但这是基本了解状态机的关键一步。在不知道所提供的问题陈述的情况下,我认为这项任务正试图把你推向那个方向。此外,在任何范例中,尽管对于Java,我们将坚持使用OO,但有许多方法可以添加一些美观和容错层,以获得更好的解决方案,但我的意图是坚持使用对您来说最简单的方法。例如,您可以创建一个类来表示等待用户响应的每个状态(问题1、问题2等),并对应用程序中的状态和转换进行建模。建模的每个州都知道所问的问题、可能的答案以及向其他州的过渡。在OO系统中,这些状态中的每一个都有一个API,并通过诸如execute()之类的调用进行操作,该调用将评估系统的当前状态并确定转换。你自己再做一些研究

    回到你简单的例子。假设你只有两个案例,每个问题一个:“新内容”和“你编程了吗?”。在类中存储一些表示(命名常量是很好的做法):

    class Interrogator {
         String q1 = "what's new";
         String a1 = ...do you program?";
         String q2 = "yes";
         ...
    }
    

    现在,在actionPerformed中,根据已知问题测试问题文本区的内容,并根据已知回答测试答案区的内容:if (a1.equals(textArea.getText() && q2.equals(text.getText()))然后您知道初始(未提示)问题的答案显示出来,并输入了预期的回答。不要忘记格式转换(小写,带引号)

  2. # 2 楼答案

    它提供默认值,因为第二个if语句位于第一个if语句内。当第一个测试为true时,嵌套在第一个测试中的第二个测试将为false,将else子句括起来,以默认文本覆盖textArea。你应该这样做

    if (text.toLowerCase().replaceAll("'", "").contains("whats new")){
       ...       
    }
    else if (text.toLowerCase().replaceAll("'", "").contains("yes")) {
       ...
    }
    else {
        ...
    }