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; } } }
因为我接触的面相对象编程实例不多,如有网友大大能给我一些宝贵的意见,那么感激不敬。