繁体   English   中英

如果用户输入不是数字(0-9)或算术运算符(+ - * /),如何使JOptionPane显示错误

[英]How to make JOptionPane displays error if user input is not digit( 0-9 ) or arithmetic operator( + - * /)

如果用户在JtextField中输入0-9或+ - / *以外的任何内容,则JOptionPane会向用户显示错误。
我看到了一些可能的方法...可能是documentListener或Inputverifyer。

主类

package p2gui;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.*;
import javax.swing.JOptionPane;

/**
 *
 *
 */
public class P2GUI extends JFrame implements ActionListener {

    JFrame f = new JFrame("Three Address Generator");// Title

    private final JButton evaluate;
    private final JLabel textfieldLabel;
    private final JTextField entryField;
    private final JLabel resutfieldlabel;
    private final JTextField resultField;
    private final JOptionPane popup = new JOptionPane();

    public void display() {
        setVisible(true);
    }

    P2GUI() {

        f.setSize(425, 180);//450 width and 525 height  
        f.setLayout(null);//using no layout managers  
        f.setVisible(true);//making the frame visible  //window size
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textfieldLabel = new JLabel("Enter Postfix Expression");
        f.add(textfieldLabel);
        textfieldLabel.setBounds(10, 10, 160, 25);

        entryField = new JTextField("");
        entryField.addActionListener(this);//ActionListener
        f.add(entryField);
        entryField.setBounds(160, 10, 220, 25);

        evaluate = new JButton("Construct Tree");//creating instance of JButton  
        evaluate.addActionListener(this);//ActionListener
        f.add(evaluate);
        evaluate.setBounds(137, 55, 130, 30);

        resutfieldlabel = new JLabel(" Infix Expression ");
        f.add(resutfieldlabel);
        resutfieldlabel.setBounds(20, 100, 100, 25);

        resultField = new JTextField("");
        resultField.addActionListener(this);//ActionListener
        resultField.setEditable(false);
        f.add(resultField);

        resultField.setBounds(125, 100, 220, 25);

    }

   @Override
   public void actionPerformed(ActionEvent e) {


    if (e.getSource() == evaluate) {
        String fullString = entryField.getText().trim();
        if (fullString.matches("\\d+") || fullString.matches("[-+*/]")) {
            Convert conversion = new Convert();
            resultField.setText(conversion.convert(fullString));
            eraseTextField();
        }else {
            JOptionPane.showMessageDialog(null,"Wrong input enter a digit or 
    arithmetic operator");
            eraseTextField();
        }

    }

}
    public void eraseTextField() {
        entryField.setText("");
        entryField.requestFocus();
    }

    public static void main(String[] args) {
        P2GUI p1GUI;
        p1GUI = new P2GUI();

    }
}

兑换。 java类

package p2gui;

import java.util.Stack;

/**
 *
 * @author Mike
 */
public class Convert {

    /**
     * Checks if the input is operator or not
     *
     * @param c input to be checked
     * @return true if operator
     */
    private boolean operator(char c) {
        return c == '+' || c == '-' || c == '*' || c == '/' || c == '^';
    }

    /**
     * Converts any postfix to infix
     *
     * @param postfix String expression to be converted
     * @return String infix expression produced
     */
    public String convert(String postfix) {
        Stack<String> s = new Stack<>();

        for (int i = 0; i < postfix.length(); i++) {
            char c = postfix.charAt(i);
            if (operator(c)) {
                String b = s.pop();
                String a = s.pop();
                s.push("(" + a + c + b + ")");
            } else {
                s.push("" + c);
            }
        }

        return s.pop();
    }

}

您可以使用正则表达式来解决您的问题,这是一个简单的示例,您可以使用它来解决您的问题:

String str = "123";
if (str.matches("\\d+")) {
    JOptionPane.showMessageDialog(null, "Degit");
} else if (str.matches("[-+*/]")) {
    JOptionPane.showMessageDialog(null, "arithmetic operator( + - * /)");
}else{
    JOptionPane.showMessageDialog(null, "Incorrect input");
}

解释

str.matches("[-+*/]")如果你的输入是- + *或/那么它将返回true。
str.matches("\\\\d+")如果你的输入是一个数字,那么它将返回true

您可以使用String.matches()来验证用户输入的表达式。

所以这个基本代码:

String expression = "9+45-3/5*9"; //store expression here from text-field.

boolean isvalid = expression.matches("[0-9-+*/]+");

if(isvalid)
    JOptionPane.showMessageDialog(null,"Valid Expression!");
else
    JOptionPane.showMessageDialog(null,"Not Valid Expression!");

仍然在这里你需要检查没有两个运营商连续和其他东西的其他要求。

暂无
暂无

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

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