Java正则表达式实现计算器_用java编写win7计算器
展開全部
參考代碼:62616964757a686964616fe78988e69d8331333337393635import?java.awt.*;
import?java.awt.event.*;
import?java.math.BigDecimal;
import?javax.swing.*;
//創建計算器Calculator類,實現ActionListener接口
public?class?Calculater?implements?ActionListener?{
//定義變量和按鈕數組
private?String[]?names?=?{"Backspace","CE","C","+","7","8","9","-",
"4","5","6","*","1","2","3","/","0","+/-",".","="
};
private?JButton[]?buttonArray?=?new?JButton[names.length];
private?boolean?append?=?false;//默認追加為false
private?String?operator?=?"+";//默認運算符為“+”
private?String?s1?=?"0";//默認字符為0
private?String?ss?=?"0";//默認字符為0
//創建可以顯示20個字符的文本框
JTextField?jtf?=?new?JTextField(20);
//構造方法
public?Calculater()?{}
public?Calculater(String?title)?{
//創建窗口、面板,并設置面板布局為網格布局
JFrame?jf?=?new?JFrame(title);
JPanel?jp?=?new?JPanel();
jp.setLayout(new?GridLayout(5,4));
//依次添加按鈕到面板中,并為按鈕注冊監聽器
for?(int?i?=?0;?i?
buttonArray[i]?=?new?JButton(names[i]);
buttonArray[i].addActionListener(this);
jp.add(buttonArray[i]);
}
//添加文本框到窗體中
jf.add(jtf,BorderLayout.NORTH);
jf.add(jp);//添加面板到窗體中
jtf.setHorizontalAlignment(JTextField.RIGHT);//設置文本框的水平方向為右
jtf.setText("0");//設置初始文本為0
jtf.setEditable(false);//設置文本框為不可編輯狀態
//設置窗體屬性
jf.pack();//系統自動設置大小和位置
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//實現監聽接口的actionPerformed方法
public?void?actionPerformed(ActionEvent?e)?{
String?comm?=?e.getActionCommand();
if(comm.matches("\\d"))?{?//用正則表達式判斷輸出的是否是0~9
if(append)?{?//如果是,追加顯示
String?temp?=?jtf.getText();
jtf.setText(temp?+?comm);
}?else?{?//如果不是,顯示該字符并將追加設置為true
jtf.setText(comm);
append?=?true;
}
}?else?if(comm.equals("."))?{?//輸入小數點時
String?temp?=?jtf.getText();
if(temp.indexOf(".")==?-1?&&?append)?{?//當輸入的文本中沒有小數點時
jtf.setText(temp+comm);
append?=?true;//輸入小數點后繼續追加
}?else?if(!append)?{//當字符串開始時候先輸入?"?.?"?則直接輸出"?0.?"
jtf.setText("0"+comm);
append?=?true;
}
}?else?if("+-*/".indexOf(comm)!=?-1)?{?//輸入加減乘除符號時,
//以下運算應該注意數據類型,尤其是大數字和浮點數及int數在運算中的區別
operator?=?comm;
s1?=?jtf.getText();
double?d3?=?Double.parseDouble(s1);
double?d4?=?Double.parseDouble(ss);
BigDecimal?bd3?=?new?BigDecimal(d3+"");
BigDecimal?bd4?=?new?BigDecimal(d4+"");
if(operator.equals("+"))?{?//加法時
d3?=?bd3.add(bd4).doubleValue();
ss?=?d3+"";
jtf.setText(ss);
}?else?if(operator.equals("-"))?{?//減法時
if(d4?==?0.0)?{
ss?=?s1;
jtf.setText(ss);
}?else?{
d3?=?bd4.subtract(bd3).doubleValue();
ss?=?d3+"";
jtf.setText(ss);
}
}?else?if(operator.equals("*"))?{?//乘法時
if(d4?==?0.0)?{
ss?=?s1;
jtf.setText(ss);
}?else?{
d3?=?bd3.multiply(bd4).doubleValue();
ss?=?d3+"";
jtf.setText(ss);
}
}?else?if(operator.equals("/"))?{?//除法時
if(d4?==?0.0)?{
ss?=?s1;
jtf.setText(s1);
}?else?{
d3?=?bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
ss?=?d3+"";
jtf.setText(ss);
}
append?=?false;//不繼續追加
}?else?if(comm.equals("="))?{?//輸入等號時,計算加減乘除的結果
String?s2?=?jtf.getText();
double?d1?=?Double.parseDouble(ss);
double?d2?=?Double.parseDouble(s2);
BigDecimal?bd1?=?new?BigDecimal(d1+"");
BigDecimal?bd2?=?new?BigDecimal(d2+"");
if(operator.equals("+"))?{
d1?=?bd1.add(bd2).doubleValue();
}?else?if(operator.equals("-"))?{
d1?=?bd1.subtract(bd2).doubleValue();
}?else?if(operator.equals("*"))?{
d1?=?bd1.multiply(bd2).doubleValue();
}?else?if(operator.equals("/"))?{?//精確計算浮點除法
if(d2!=0.0)?{
d1?=?bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
ss?=?"0";
jtf.setText(d1+"");
append?=?false;//不繼續追加
}?else?if(comm.equals("CE")||comm.equals("C"))?{?//輸入CE或C時
jtf.setText("0");
ss?=?"0";
append?=?false;
}?else?if(comm.equals("+/-"))?{?//改變數值的正負號
String?temp?=?jtf.getText();
if(!append)?{
jtf.setText("-");
append?=?true;
}?else?if(temp.startsWith("-"))?{?//如果字符串以負號開頭
jtf.setText(temp.substring(1));
}?else?{
jtf.setText("-"?+?temp);
}
}?else?if(comm.equals("Backspace"))?{?//輸入Backspace時,退回一個字符
String?temp?=?jtf.getText();
if(temp.length()>0)
jtf.setText(temp.substring(0,temp.length()-1));
}
}
//主方法
public?static?void?main(String[]?args)?{
//創建名為Calculator的計算器對象
new?Calculater("計算器");
}
}
總結
以上是生活随笔為你收集整理的Java正则表达式实现计算器_用java编写win7计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java值传递试题_面试题:java参数
- 下一篇: java中日期怎么_Java 中的日期处