gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:48 25 4
gpt4 key购买 nike

如果用户在 JtextField 中输入 0-9 或 + -/* 以外的任何内容,则 JOptionPane 会向用户显示错误。
我看到了几种可能做到这一点的不同方法......也许是一个文档监听器或一个输入 validator 。

主类

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

关于java - 如果用户输入不是数字(0-9)或算术运算符(+ - */),如何使 JOptionPane 显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43304027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com