繁体   English   中英

ActionListener方法未收到正确的输入

[英]ActionListener method isn't receiving correct input

我正在用GUI构建语言算术求解器。 我正在运行它,并且正在触发ActionListener。 但是,我做错了,因为如果我输入send + more = money,它将解决难题并输出这些字符串的数字版本。 无论如何,我都遇到了另一种情况,它输出“不适用于这些单词”。 我无法弄清楚应该发送给ActionListener以便满足适当的条件。该代码昨晚在我决定添加GUI之前运行良好,所以我确定只是我没有在其中放入正确的内容ClickListener方法。 请帮忙!

import java.util.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class SummationSolver extends JFrame 
{
   private JButton button;
   private JLabel label1;
   private JLabel label2;
   private JTextField textField;
   private static final int FIELD_WIDTH = 15;
   private static final int FRAME_WIDTH = 600;
   private static final int FRAME_HEIGHT = 400;
   String input;

   public SummationSolver()
   {
      createComponents();
      setSize(FRAME_WIDTH, FRAME_HEIGHT);
   }
   private void createComponents()
   {
      Color tennesseeOrange = new Color(255, 165, 0);
      button = new JButton("Generate");
      button.setForeground(Color.BLACK);
      ActionListener listener = new ClickListener();
      button.addActionListener(listener);
      label1 = new JLabel("Enter input: ");
      label1.setForeground(Color.BLACK);
      textField = new JTextField(FIELD_WIDTH);
      label2 = new JLabel("");
      label2.setForeground(Color.BLACK);
      JPanel panel = new JPanel();
      panel.setBackground(tennesseeOrange);
      panel.add(label1);
      panel.add(textField);
      panel.add(button);
      panel.add(label2);
      add(panel);
   }
   class ClickListener implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         input = (textField.getText());
         solve(input);
         if (input.equals(""))
         {
            label2.setText("word");
         }
         else 
         {
            label2.setText("Does not work with this set of words");
         }
      }
   }
   static int eval(String word) 
   {
      int val = 0;
      StringTokenizer str = new StringTokenizer(word, "*/+-", true);
      while (str.hasMoreTokens()) 
      {
         String next = str.nextToken().trim();
         if (next.equals("+")) 
         {
            val += Integer.parseInt(str.nextToken().trim());
         } 
         else if (next.equals("-")) 
         {
            val -= Integer.parseInt(str.nextToken().trim());
         } 
         else if (next.equals("*")) 
         {
            val *= Integer.parseInt(str.nextToken().trim());
         } 
         else if (next.equals("/")) 
         {
         val /= Integer.parseInt(str.nextToken().trim());
         } 
         else 
         {
            val = Integer.parseInt(next);
         }
      }
      return val;
   }
   static String solve(String word) 
   {
      char c = 0;
      for (int i = 0; i < word.length(); ++i) 
      {
         if (Character.isAlphabetic(word.charAt(i))) 
         {
            c = word.charAt(i);
            break;
         }
      }
      if (c == 0) 
      {
         String[] ops = word.split("=");
         int o1 = eval(ops[0]), o2 = eval(ops[1]);
         if (o1 == o2) return word;
         else return "";         
      } 
      else 
      {
         char[] dset = new char[10];
         for (int i = 0; i < word.length(); ++i)
         if (Character.isDigit(word.charAt(i)))
         dset[word.charAt(i)-'0'] = 1;
         for (int i = 0; i < 10; ++i)
         {
            if (dset[i] == 0) 
            {
               String r = solve(word.replaceAll(String.valueOf(c),
               String.valueOf(i)));
               if (!r.isEmpty()) return r;
            }
         }
      }
      return "";
   }
   public static void main(String[] args) 
   {

      JFrame frame = new SummationSolver();
      frame.setTitle("Summation Solver");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);


   }
}

似乎您需要添加input = solve(input); actionPerformed()方法中。 阅读有关String不变性的更多信息

也许您可能想看一下这个存储库:它是使用JavaFX解决口头算术问题的解决方案。 Firefly算法GitHub

关于存储库:

  • 用于解决口头算术问题的源代码和最新版本

例如,单元测试

import com.core.luciernaga.Programa;
import com.core.luciernaga.Luciernaga;
import com.core.luciernaga.Util;

 @Test
 public void first(){
     Programa p = new Programa();
     p.setOperacion("+");
     Util.setEnableInfo(true);
     p.setPalabra1("MONEY".toCharArray());
     p.setPalabra2("MORE".toCharArray());
     p.setPalabra3("SEND".toCharArray());

     int n = 0;
     int totalIterations = 30;
     while(p.getLuciernagaSolucion() == null && n < totalIterations){
         p.programa();
         n++;
     }
     if (p.getLuciernagaSolucion() != null) {
         Util.info("Problem solved!");
         p.mostrarSolución();
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM