[Java] 一个简单的计算器 →→→→→进入此内容的聊天室

来自 , 2020-01-28, 写在 Java, 查看 111 次.
URL http://www.code666.cn/view/c4851e8e
  1. package jisuanqi;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4.  
  5. public class Calculator implements ActionListener{
  6. private double data1=0.0,data2=0.0;
  7. private String t_content;
  8. boolean number=false;
  9.  
  10. //key用来标示用户所按下的按钮即加减乘除
  11. //key为0标示+,为1表示-,为2表示*,为3表示/
  12. short key=-1;
  13.  
  14. //pkey的取值为-1~5
  15. //pkey为-1表示第一次按下=按钮,为5说明不是第一次按下=按钮
  16. //pkey为其他值0,1,2,3时分别代表+,-,*,/
  17. short pkey=-1;
  18.  
  19. Frame frame=new Frame("我的计算器");//定义标题为计算器的窗体
  20. TextField textfield=new TextField(30);//定义计算器
  21.  
  22. //定义backspace,ce,c0按钮
  23. Button backspace=new Button("Backspace");
  24. Button ce=new Button("CE");
  25. Button c0=new Button("C");
  26.  
  27. //定义面板,其中backspace,ce,c0按钮和计算机兰textfeild放在面板p1中
  28. //其余按钮放在面板p2中
  29. Panel p1=new Panel();
  30. Panel p2=new Panel();
  31.  
  32. //定义界面上的按钮数组,即除去backspace,ce,c0按钮的所有按钮
  33. String names[]={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
  34. Button bb[]=new Button[names.length];
  35.  
  36. public static void main(String[] args){
  37.  Calculator cal=new Calculator();
  38.  cal.go();
  39. }
  40.  
  41. public void go(){
  42. frame.setSize(500,300);
  43. frame.setLayout(new BorderLayout());
  44. Font fonts=new Font("草体_GB2312",Font.PLAIN,12); // 第一页
  45.  
  46. //设置面板p1的字体和布局管理类型,将textfeild对象添加到面板中
  47. p1.setFont(fonts);
  48. p1.setLayout(new GridLayout(2,1,5,10));
  49. textfield.setFont(fonts);
  50. p1.add(textfield,null);
  51.  
  52. //backspace,ce,c0按钮注册addActionListener方法
  53. backspace.addActionListener(this);
  54. ce.addActionListener(this);
  55. c0.addActionListener(this);
  56.  
  57. //将backspace,ce,c0按钮添加到p1面板中
  58. p1.add(backspace,null);
  59. p1.add(ce,null);
  60. p1.add(c0,null);
  61.  
  62. //设置面板p2的布局管理器类型为GridLayout
  63. p2.setLayout(new GridLayout(4,5,5,5));
  64.  
  65. //为按钮组中的按钮注册addActionListener方法
  66. for(int i=0;i<names.length;i++){
  67. bb[i]=new Button(names[i]);
  68. p2.add(bb[i]);
  69. bb[i].addActionListener(this);
  70. }
  71.  
  72. //设置面板p1和面板p2在窗体中的位置
  73. //面板p1在窗体的North方向,面板p2在窗体的South方向
  74. frame.add(p1,BorderLayout.NORTH);
  75. frame.add(p2,BorderLayout.SOUTH);
  76. frame.setVisible(true);
  77.  
  78. //当单击关闭按钮时退出系统
  79. frame.addWindowListener(new WindowAdapter(){
  80.  public void windowClosing(WindowEvent e){
  81.  System.exit(0);
  82.  }
  83.  });
  84. }
  85.  public void actionPerformed(ActionEvent ae){
  86.  String s;
  87. //通过ActionEvent类的getActionCommand()方法,得出动作是由哪个按钮触发的。 //第二页
  88.  s=ae.getActionCommand();
  89.  
  90. //用户单击一次,计算栏里便去掉一个字符
  91. //先将计算栏里的字符清空,再添加除最好一个字符的字符串
  92.  if(s.equals("Backspace")&&number){
  93.  t_content=textfield.getText();
  94.  textfield.setText("");
  95.  
  96. for(int i=0;i<t_content.length()-1;i++){
  97.  char c=t_content.charAt(i);
  98.  textfield.setText(textfield.getText()+c);
  99.  }
  100. }
  101.  
  102. //用户单击的是CE按钮,计算栏清空
  103. if(s.equals("CE")){
  104.  textfield.setText("");
  105. number=false;
  106. }
  107.  
  108. //用户单击的是C按钮
  109. if(s.equals("C")){
  110.  textfield.setText("");
  111. data1=data2=0.0;
  112. number=false;
  113. }
  114.  
  115. //用户单击的是sqrt按钮,其中负数不能被开方
  116. if(s.equals("sqrt")&&number){
  117.  t_content=textfield.getText();
  118.  if(t_content.charAt(0)=='-'){
  119.  textfield.setText("负数不能被开方");
  120.  number=false;
  121.  }else{
  122.  textfield.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(t_content))));
  123.  }
  124. }
  125.  
  126. //用户单击的是1/x求倒数按钮,求倒数时分母不能为0
  127. if(s.equals("1/x") && number){
  128.  t_content=textfield.getText();
  129. if(t_content.equals("0")){ //第三页
  130. textfield.setText("零不能求倒数");
  131.  number=false;
  132. }else{
  133.  textfield.setText(Double.toString(1/Double.parseDouble(t_content)));
  134.  }
  135. }
  136.  
  137. //用户单击的是%按钮
  138. if(s.equals("%")&&number){
  139.  if(data2==0){
  140.  t_content=textfield.getText();
  141.  textfield.setText(t_content);
  142. }else{
  143.  boolean g=false;
  144.  for(int i=0;i<textfield.getText().length();i++)
  145.  if('.'==textfield.getText().charAt(i)){
  146.  g=true;
  147.  break;
  148. }
  149.  
  150. //如果是Double 数,除100
  151. if(g=true){
  152.  double dtemp=Double.parseDouble(textfield.getText());
  153.  dtemp=dtemp/100.0;
  154.  textfield.setText(Double.toString(dtemp));
  155.  }
  156.  
  157. //如果是int数但能被100整除,则去掉末尾两个0
  158. else{
  159.  if(Integer.parseInt(textfield.getText())%100==0){
  160.  int itemp=Integer.parseInt(textfield.getText());
  161.  itemp/=100;
  162.  textfield.setText(Integer.toString(itemp));
  163.  }
  164.  
  165. //如果是int数,但不能被100整除,则按Double数处理
  166. else{
  167.  double dtemp=Double.parseDouble(textfield.getText());
  168.  dtemp=dtemp/100.0;
  169.  textfield.setText(Double.toString(dtemp));
  170.  }
  171.  }
  172. } //第四页
  173.  
  174. }
  175.  
  176.  //对正负数字的处理
  177.  if(s.equals("+/-")){
  178.  t_content=textfield.getText();
  179.  if(t_content.charAt(0)=='-'){
  180.  textfield.setText("");
  181.  String content;
  182.  for(int i=1;i<t_content.length();i++){
  183.  textfield.setText(textfield.getText()+t_content.charAt(i));
  184.  }
  185. }else{
  186.  textfield.setText("-"+t_content);
  187.  }
  188.  }
  189.  
  190.  //所按下的按钮为+按钮
  191. if(s.equals("+")){
  192.  switch(pkey){
  193.  case 0:
  194.  data2+=Double.parseDouble(textfield.getText());
  195.  break;
  196.  case 1:
  197.  data2+=Double.parseDouble(textfield.getText());
  198.  break;
  199.  case 2:
  200.  data2+=Double.parseDouble(textfield.getText());
  201.  break;
  202.  case 3:
  203.  if(textfield.getText().equals("0")){
  204.  textfield.setText("除数不能为零");
  205.  number=false;
  206.  }else{
  207.  key=-1;
  208.  data2/=data1;
  209.  textfield.setText(Double.toString(data2));
  210.  break;
  211.  }
  212.  default:
  213.  data2=Double.parseDouble(textfield.getText());
  214. }
  215.  pkey=key=0;
  216.  textfield.setText("");
  217. }
  218.  //第五页
  219.  
  220.  //所按下的按钮为-按钮
  221.  
  222. if(s.equals("-")){
  223.  switch(pkey){
  224.  case 0:
  225.  data2+=Double.parseDouble(textfield.getText());
  226.  break;
  227.  case 1:
  228.  data2+=Double.parseDouble(textfield.getText());
  229.  break;
  230.  case 2:
  231.  data2+=Double.parseDouble(textfield.getText());
  232.  break;
  233.  
  234.  case 3:
  235.  if(textfield.getText().equals("0")){
  236.  textfield.setText("除数不能为零");
  237.  number=false;
  238.  }else{
  239.  key=-1;
  240.  data2/=data1;
  241.  textfield.setText(Double.toString(data2));
  242.  break;
  243.  }
  244.  default:
  245.  data2=Double.parseDouble(textfield.getText());
  246.  }
  247.  pkey=key=1;
  248.  textfield.setText("");
  249.  }
  250.  
  251.  //所按下的按钮为*按钮
  252.  if(s.equals("*")){
  253.  switch(pkey){
  254.  case 0:
  255.  data2+=Double.parseDouble(textfield.getText());
  256.  break;
  257.  case 1:
  258.  data2+=Double.parseDouble(textfield.getText());
  259.  break;
  260.  case 2:
  261.  data2+=Double.parseDouble(textfield.getText());
  262.  break;
  263.  
  264.  case 3:
  265.  if(textfield.getText().equals("0")){ // 第六页
  266.  textfield.setText("除数不能为零");
  267.  number=false;
  268.  }else{
  269.  key=-1;
  270.  data2/=data1;
  271.  textfield.setText(Double.toString(data2));
  272.  break;
  273.  }
  274.  default:
  275.  data2=Double.parseDouble(textfield.getText());
  276.  }
  277.  pkey=key=2;
  278.  textfield.setText("");
  279.  }
  280.  
  281.  //所按下的按钮为/按钮
  282.  if(s.equals("/")){
  283.  switch(pkey){
  284.  case 0:
  285.  data2+=Double.parseDouble(textfield.getText());
  286.  break;
  287.  case 1:
  288.  data2+=Double.parseDouble(textfield.getText());
  289.  break;
  290.  case 2:
  291.  data2+=Double.parseDouble(textfield.getText());
  292.  break;
  293.  
  294.  case 3:
  295.  if(textfield.getText().equals("0")){
  296.  textfield.setText("除数不能为零");
  297.  number=false;
  298.  }else{
  299.  key=-1;
  300.  data2/=data1;
  301.  textfield.setText(Double.toString(data2));
  302.  break;
  303.  }
  304.  default:
  305.  data2=Double.parseDouble(textfield.getText());
  306.  }
  307.  pkey=key=3;
  308.  textfield.setText("");
  309.  } //第七页
  310.  
  311. //所按下的按钮为=,求结果
  312.  if(s.equals("=")&&number){
  313.  
  314.  //如果不是第一次按下=按钮
  315.  if(pkey==5){
  316.  switch(pkey){
  317.  case 0:
  318.  data2+=data1;
  319.  textfield.setText(Double.toString(data2));
  320.  break;
  321.  case 1:
  322.  data2-=data1;
  323.  textfield.setText(Double.toString(data2));
  324.  break;
  325.  case 2:
  326.  data2*=data1;
  327.  textfield.setText(Double.toString(data2));
  328.  break;
  329.  case 3:
  330.  if(textfield.getText().equals("0")){
  331.  textfield.setText("除数不能为零");
  332.  number=false;
  333.  }else{
  334.  
  335.  data2/=data1;
  336.  textfield.setText(Double.toString(data2));
  337.  break;
  338.  }
  339.  }
  340.  }
  341.  
  342.  //如果是第一次按下=按钮
  343.  else{
  344.  data1=Double.parseDouble(textfield.getText());
  345.  switch(key){
  346.  case 0:
  347.  key=-1;
  348.  data2+=Double.parseDouble(textfield.getText());
  349.  textfield.setText(Double.toString(data2));
  350.  break;
  351.  
  352.  case 1:
  353.  key=-1;
  354.  data2-=Double.parseDouble(textfield.getText());
  355.  textfield.setText(Double.toString(data2)); //第八页
  356.  break;
  357.  case 2:
  358.  key=-1;
  359.  data2*=Double.parseDouble(textfield.getText());
  360.  textfield.setText(Double.toString(data2));
  361.  break;
  362.  case 3:
  363.  if(textfield.getText().equals("0")){
  364.  textfield.setText("除数不能为零");
  365.  number=false;
  366.  }else{
  367.  key=-1;
  368.  data2/=Double.parseDouble(textfield.getText());
  369.  textfield.setText(Double.toString(data2));
  370.  break;
  371.  }
  372.  }
  373.  }
  374.  pkey=5;
  375.  }
  376.  
  377.  //按下的按钮时数字按钮
  378.  else{
  379.  switch(s.charAt(0)){
  380.  case'0':
  381.  case'1':
  382.  case'2':
  383.  case'3':
  384.  case'4':
  385.  case'5':
  386.  case'6':
  387.  case'7':
  388.  case'8':
  389.  case'9':
  390.  number=true;
  391.  textfield.setText(textfield.getText()+s);
  392.  break;
  393.  //对.的处理
  394.  case'.':
  395.  t_content=textfield.getText();
  396.  boolean g=false; //第九页
  397.  //对计算机栏中的数据进行检验
  398.  //如果其中有小数点,则用户单击该按钮时不在添加小数点
  399.  for(int i=0;i<t_content.length();i++){
  400.  if(t_content.charAt(i)=='.'){
  401.  g=true;
  402.  break;
  403.  }
  404.  }
  405.  
  406.  //数据中已经有小数点
  407.  if(g==true)
  408.  break;
  409.  // 数据中没有小数点,当用户单击小数点时添加小数点
  410.  if(g==false)
  411.  textfield.setText(t_content+".");
  412.  }
  413.  }
  414.  }
  415.  
  416. private String Integer(String string) {
  417.  // TODO Auto-generated method stub
  418.  return null;
  419.  }
  420.  }
  421.  

回复 " 一个简单的计算器"

这儿你可以回复上面这条便签

captcha