2016-05-19 16:20
简单的java计算器 实现了重复标点及运算符连点限制
今天练习了一个简约的java计算器的实现,特此阿萌分享代码给大家,本计算器代码也许有冗余,但是达到的限制效果还是比较完好的。

程序的实现还是比较简单的,而且代码也比较乱,想到那写到哪,但是对于作为练习的一个例子,还是有参考价值的,尤其是至少做到了还不错的规格限制,例如:
限制了不能重复输入多个逗号,以及运算符的连点限制,与此同时也保证了正常的连续运算。
下面贴出代码,因为包含着界面,代码量还是可以的:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Calculator extends JFrame implements ActionListener{
JPanel jp=new JPanel(new GridLayout(5,4,4,3));
JTextField jt=new JTextField();
public Calculator(){
super("Calculator简易计算器");
setSize(260,240);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
getContentPane().add(jt,BorderLayout.NORTH);
getContentPane().add(jp,BorderLayout.CENTER);
jt.setHorizontalAlignment(JTextField.RIGHT);
jt.setBackground(new Color(240,240,240));
jt.setText("0");
String btnStr[]={"sqrt","+/-","Back","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
JButton b[]=new JButton[btnStr.length];
for(int i=0;i<btnStr.length;i++){
b[i]=new JButton(btnStr[i]);
jp.add(b[i]);
b[i].addActionListener(this);
}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[]){
new Calculator();
}
int first=1;
String jisuan,oldJisuan;
double a=0;
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand().trim();
if(str=="C"){
a=0;
jt.setText("0.");
first=1;
}else if(str=="Back"){
jt.setText(jt.getText().substring(0,jt.getText().length()-1));
}else if(str=="+/-"){
if(jt.getText().charAt(0)=='-'){
jt.setText(jt.getText().substring(1,jt.getText().length()));
}else{
jt.setText("-"+jt.getText());
}
}else if(str=="sqrt"){
a=Double.parseDouble(jt.getText());
a=Math.sqrt(a);
jt.setText(String.valueOf(a));
}else if("0123456789.".indexOf(str)!=-1){
if(str=="."&&jt.getText().indexOf(".")!=-1){
}else if(first==1){
jt.setText(str);
first=0;
}else{
jt.setText(jt.getText()+str);
}
}else if("+-*/=".indexOf(str)!=-1&&str!=jisuan){
oldJisuan=jisuan;
jisuan=str;
first=1;
if(a!=0){
if(jisuan!="="){
jisuan(jisuan);
}else{
jisuan(oldJisuan);
}
jt.setText(String.valueOf(a));
}else{
a=Double.parseDouble(jt.getText());
}
}
}
public void jisuan(String s){
switch(s){
case "+":
a+=Double.parseDouble(jt.getText());
break;
case "-":
a-=Double.parseDouble(jt.getText());
break;
case "*":
a*=Double.parseDouble(jt.getText());
break;
case "/":
a/=Double.parseDouble(jt.getText());
break;
}
}
}
因为我接触的面相对象编程实例不多,如有网友大大能给我一些宝贵的意见,那么感激不敬。

