带括号的计算器 java_【福利】java新手做的复合型计算器!
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
先前用那個代碼不走樣說要審核,我這里不用那個來發代碼
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List; public class CalculaterYYWF extends JFrame {
private JPanel contentPane;
private JTextField textField;
private List listSign = new ArrayList();
private List listNum = new ArrayList(); public static void main(String[] args) {
new CalculaterYYWF();
} public CalculaterYYWF() {
setResizable(false);
setBackground(new Color(240, 255, 240));
setTitle("有猿無粉牌計算器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 265, 375);
contentPane = new JPanel();
contentPane.setBackground(new Color(224, 255, 255));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();
textField.setBounds(10, 10, 237, 44);
contentPane.add(textField);
textField.setColumns(10);
JPanel panel = new JPanel();
panel.setBackground(new Color(224, 255, 255));
panel.setBounds(10, 64, 237, 273);
contentPane.add(panel);
panel.setLayout(new GridLayout(5, 4, 5, 5));
String stmp = "123+456-789*0.%/()";
for (int i = 0; i < 18; i++) {
JButton j = new JButton(String.valueOf(stmp.charAt(i)));
j.setActionCommand(j.getText());
panel.add(j);
j.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText().trim()
+ e.getActionCommand());
}
});
}
JButton bt_clear = new JButton("C");
panel.add(bt_clear);
bt_clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText("");
}
});
JButton bt_deng = new JButton("=");
panel.add(bt_deng);
bt_deng.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String expression = textField.getText();
bracketResolve(expression);
}
});
setVisible(true);
} // 逐層消括號并計算
public void bracketResolve(String exp) {
String strjs = convertString(exp);
try {
int zkh = -1; // 要處理的括號對中左括號的位置
while ((zkh = strjs.lastIndexOf("(")) != -1) {// 每次循環處理--最里面--的哪對括號
StringBuffer str = new StringBuffer(strjs);// 存要處理的括號對里面的內容
StringBuffer str1 = new StringBuffer(strjs);// 存運算式字符串剪去處理的括號對后左邊的內容
StringBuffer str2 = new StringBuffer(strjs);// 存運算式字符串剪去處理的括號對后右邊的內容
str.delete(0, zkh + 1);// delete方法中end位置上的元素沒有刪
str1.delete(zkh, str1.length());
int ykh = str.indexOf(")");// 在最后面左括號的右邊,距離左括號最近的右括號的位置(最里面的那對括號)
str.delete(ykh, str.length());
str2.delete(0, zkh + ykh + 2);// 一對括號占兩位置,還有刪除的最后一位加1
Double tmp = operation(new String(str));// 計算這對括號里的表達式的值
strjs = new String(str1.toString() + String.valueOf(tmp)
+ str2.toString());// 消去一對括號,重新構建表達式,循環遞歸處理所有的括號.
}
Double result = operation(strjs);// 分解到沒有括號存在時候,進行最后一次計算.
textField.setText(String.valueOf(result));
} catch (Exception e) {
expIrregularities();// 對其他所有沒考慮到的情況統一處理
} }
總結
以上是生活随笔為你收集整理的带括号的计算器 java_【福利】java新手做的复合型计算器!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国六b排放对买车有什么影响呢?
- 下一篇: java线程主要状态及转换_Java线程