版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用Java编写的计算器一:源程序:import java.awt.*;import java.awt.event.*;public class A5i13w extends Frame implements ActionListener private Label Labelshow=new Label(显示区:); private Label Labelsay=new Label(状态:,Label.CENTER); private Label Labelnow=new Label(欢迎使用我,艾全通为你带来的科学计算器,Label.LEFT); private Label Labeltim
2、e=new Label(暂且为空);/为以后添加其他的辅助功能 private TextField Textshow=new TextField(40); private Panel pan1=new Panel(); private Panel pan2=new Panel(); private Panel pan3=new Panel(); private Button button1=new Button(1); private Button button2=new Button(2); private Button button3=new Button(3); private Butt
3、on button4=new Button(4); private Button button5=new Button(5); private Button button6=new Button(6); private Button button7=new Button(7); private Button button8=new Button(8); private Button button9=new Button(9); private Button button10=new Button(0); private Button button11=new Button(+); privat
4、e Button button12=new Button(-); private Button button13=new Button( ); private Button button14=new Button(); private Button button15=new Button(%); private Button button16=new Button(); private Button button17=new Button(); private Button button18=new Button(清零); private Button button19=new Button(
5、.); private Button button20=new Button(=); private Font wordFont1 =new Font(TimesRoman,Font.BOLD,13); private Font wordFont2 =new Font(TimesRoman,Font.BOLD,30); public A5i13w() /构造方法来初始化本程序的变量 super(我的科学计算器); setup(); button1.addActionListener(this); button2.addActionListener(this); button3.addActio
6、nListener(this); button4.addActionListener(this); button5.addActionListener(this); button6.addActionListener(this); button7.addActionListener(this); button8.addActionListener(this); button9.addActionListener(this); button10.addActionListener(this); button11.addActionListener(this); button12.addActio
7、nListener(this); button13.addActionListener(this); button14.addActionListener(this); button15.addActionListener(this); button16.addActionListener(this); button17.addActionListener(this); button18.addActionListener(this); button19.addActionListener(this); button20.addActionListener(this); addWindowLi
8、stener(new windowcloser(); setResizable(false); /设置此图形界面是不可以改变大小的 pack(); setVisible(true); public void setup() /搭建次程序的图形应用界面 pan1.setLayout(new BorderLayout(); Labelshow.setFont(wordFont1); pan1.add(West,Labelshow); Textshow.setFont(wordFont1); pan1.add(Center,Textshow); pan2.setLayout(new GridLayo
9、ut(4,5,5,6); button1.setFont(wordFont2);pan2.add(button1); button2.setFont(wordFont2);pan2.add(button2); button3.setFont(wordFont2);pan2.add(button3); button4.setFont(wordFont2);pan2.add(button4); button5.setFont(wordFont2);pan2.add(button5); button6.setFont(wordFont2);pan2.add(button6); button7.set
10、Font(wordFont2);pan2.add(button7); button8.setFont(wordFont2);pan2.add(button8); button9.setFont(wordFont2);pan2.add(button9); button10.setFont(wordFont2);pan2.add(button10); button11.setFont(wordFont2);pan2.add(button11); button12.setFont(wordFont2);pan2.add(button12); button13.setFont(wordFont2);p
11、an2.add(button13); button14.setFont(wordFont2);pan2.add(button14); button15.setFont(wordFont2);pan2.add(button15); button16.setFont(wordFont2);pan2.add(button16); button17.setFont(wordFont2);pan2.add(button17); button18.setFont(wordFont2);pan2.add(button18); button19.setFont(wordFont2);pan2.add(butt
12、on19); button20.setFont(wordFont2);pan2.add(button20); pan3.setLayout(new FlowLayout(FlowLayout.CENTER,2,2); Labelsay.setFont(wordFont1); Labelsay.setBackground(Color.blue ); pan3.add(Labelsay); Labelnow.setFont(wordFont1); Labelnow.setBackground(Color.gray); pan3.add(Labelnow); Labeltime.setBackgro
13、und(Color.gray); Labeltime.setFont(wordFont1); pan3.add(Labeltime); setLayout(new BorderLayout( ) ); add(North,pan1); add(Center,pan2); add(South,pan3); public class windowcloser extends WindowAdapter /通过构建类部类来使本程序可通过图形关闭 public void windowClosing(WindowEvent w) System.exit(0); public void actionPer
14、formed(ActionEvent e) /事件响应的处理 if(e.getSource()=button18) Textshow.setEditable(true); Textshow.setText(); Labelnow.setBackground(Color.green); Labelnow.setText(请按标准的数学形式输入数字!); else if(e.getSource()=button20) String QU=new String(Textshow.getText( ) ); System.out.println(); System.out.println(); /在D
15、OS中显示计算过程前,先空两行。便于前后计算的区分! System.out.println(即将计算的表达式是:+QU); Labelnow.setText(计算程序正在运行); appendchar( button20.getLabel(); appendchar( countall ( QU ) ); Textshow.setEditable(false); /设置次文本域不可编辑 else appendchar(e.getActionCommand( ) ) ; public void appendchar(String aa) /追加被激活按钮的对应事件名字 StringBuffer
16、tt=new StringBuffer(Textshow.getText().trim(); /去除空格等无用字符 tt.append(aa); Textshow.setText (new String(tt) ); public String countall(String tt) /从整体上,来以括号为单位分解来用户输入的数学表达式的方法 StringBuffer mm=new StringBuffer(tt); Boolean errorstop=true; int i, j, m=0, n=0; for( ; m!= -1 ; ) /开始对括号内容经行优先处理 m= -1; n=-2;
17、 for(i=0; imm.length(); i+) /找最里面的前半个括号 if( mm.charAt(i)= = ( ) m=i; System.out.println( 在+m+处找到( ); for(n=-1,j=m+1;jmm.length();j+) /在前半个括号找到后,再找后半个括号 if(mm.charAt(j)= = ) ) n=j; System.out.println( 在+n+处找到) ); break; if(m0&n0) break; /如没有找到括号,则跳出次部分 else if(m*n=n-1|m0&Iscountnum(mm.charAt(m-1)=0|n
18、2&Iscountnum(nn.charAt(0)7|Iscountnum(nn.charAt(nn.length()-1)0) /如此部分的第一个字符是小数点或是“”、 “”、 “%”其中之一,此部分的最后一个字符不是以数字结尾都是非法数学表达式 cancounting0=false; System.out.println(此部分的数据有问题 +nn+不可以进行计算啊); Labelnow.setBackground(Color.red); Labelnow.setText(请纠正数据后再按=键进行计算1); if(cancounting0) for(j=2;jnn.length();j+)
19、 if(Iscountnum(nn.charAt(j-2)!=0&Iscountnum(nn.charAt(j-1)!=0&Iscountnum(nn.charAt(j)!=0 ) /如出现连续三个数学计算(包括小数点)是非法数学表达式 cancounting1=false; System.out.println(nn); Labelnow.setBackground(Color.red); Labelnow.setText(请纠正数据运算符号后再按=键进行计算2); for( i=0, j=1; jnn.length(); j+) /校监此部分的数学的表达式是否可以计算 if(0Iscoun
20、tnum(nn.charAt(j-1)&Iscountnum(nn.charAt(j-1)6&Iscountnum(nn.charAt(j)=0) /记录前一个数学计算符的位置 i=j; System.out.println(i); if(nn.charAt(j)=.&Iscountnum(nn.charAt(j-1)!=0|nn.charAt(j-1)=.&Iscountnum(nn.charAt(j)! =0 ) /如小数点的前面或后面不是数字,则提示以下信息 cancounting2=false; System.out.println(此部分的数据小数有问题 +nn+ 不可以进行计算啊)
21、; Labelnow.setBackground(Color.red); Labelnow.setText(请纠正数据小数的格式后再按=键进行计算3); break; if(0Iscountnum(nn.charAt(j-1)&Iscountnum(nn.charAt(j-1)6&Iscountnum(nn.charAt(j)=1) /出现“+”,“+”,“+”,“+”,“%+”情况删除“+”即可 nn.deleteCharAt(j); System.out.println(检验数学符号没有问题); j=0; /经操作后次数学表达式改变,要从头开始 else if(2Iscountnum(nn
22、.charAt(j-1)&Iscountnum(nn.charAt(j-1)6&Iscountnum(nn.charAt(j)=2) /出现 “”,“ ”,“%”情况把“”移到前一个操作符后面 nn.deleteCharAt(j); nn.insert(i,new Character(-); System.out.println(nn); j=0; else if(Iscountnum(nn.charAt(j-1)=1&Iscountnum(nn.charAt(j)=2) /出现“+” 把“+”号删掉 nn.deleteCharAt(j-1); System.out.println(nn);
23、j=0; else if(Iscountnum(nn.charAt(j-1)=2&Iscountnum(nn.charAt(j)=2) /出现“” 把“”号用“+”代替 nn.replace(j-1,j+1,new String(+); System.out.println(nn); j=0; else if(Iscountnum(nn.charAt(j-1)*Iscountnum(nn.charAt(j)!=0) /出现其他连有两个数学符号的情况是不正确的,则有以下错误消息 cancounting3=false; System.out.println(此部分的数据运算符号有问题 +nn+不可
24、以进行计算啊); Labelnow.setBackground(Color.red); Labelnow.setText(请纠正数据后再按=键进行计算4); break; System.out.println(校对后的此部分的数学表达式是:+nn); if(cancounting0&cancounting1&cancounting2&cancounting3) /现在把校对的数学表达式划分为数字和计算符两部分,并分别储存在两个不同的数组中 for(i=0,j=1;jnn.length();j+) if(Iscountnum(nn.charAt(j)!=0&nn.charAt(j)!=.) nu
25、mgroupt=Double.parseDouble(nn.substring(i,j); countnumt=new Character(nn.charAt(j); System.out.println(表达式中的数字和计算符分别是+numgroupt+ - +countnumt); i=j+1; t+; numgroupt=Double.parseDouble(nn.substring(i,j) ); System.out.println(表达式最后一个数字和要计算的数字个数是+numgroupt+ +(t+1); for(i=0;it;i+) /现在将数字数组参考计算符数组进行计算 if
26、(2Iscountnum(countnumi)&Iscountnum(countnumi)6) /首先计算 %运算符 switch(Iscountnum(countnumi) case 3: numgroupi=numgroupi*numgroupi+1;break; case 4: numgroupi=numgroupi/numgroupi+1;break; case 5: numgroupi=numgroupi%numgroupi+1;break; for(j=i;jt-1;j+) /把计算后的数字和参与计算的计算符用其后的覆盖 numgroupj+1=numgroupj+2; count
27、numj=countnumj+1; if(it-1) numgroupj+1=numgroupj+2; i-; t-; for(i=0;it;i+) if(0Iscountnum(countnumi)&Iscountnum(countnumi)3) /现在计算+ -运算符 switch(Iscountnum(countnumi) case 1: numgroupi=numgroupi+numgroupi+1;break; case 2: numgroupi=numgroupi-numgroupi+1;break; for(j=i;jt-1;j+) /同理,把计算后的数字和参与计算的计算符用其后的覆盖 numgroupj+1=numgroupj+2; countnumj=countnumj+1; if(it-1) numgroupj+1=numgroupj+2; i-; t-; System.out.println(此部分的数计算结果是:+numgroup0); Labelnow.setBackground(Color.cyan); Labelnow.se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内科护理考试常见题目及答案
- 危重抢救知识测试题目及答案
- 2026年公证员助理业务知识测试卷及答案
- 番茄植保知识问答题目及答案分享
- 2026年西藏事业单位医疗岗考试真题及答案
- 2026年保险理赔实务知识考核考试试卷试题及答案
- 燃气销售培训考核试题及答案
- 2026年教师资格证考试教育教学知识与能力题库
- 2026年神经阻滞操作安全题库(含答案)
- 2026年社会工作者考试题库(初级、中级、高级)
- AQ 1115-2018 煤层气地面开发建设项目安全设施设计审查和竣工验收规范(正式版)
- T-SDSES 003-2024 污水处理用活性焦吸附与再生工艺技术要求
- SL721-2015水利水电工程施工安全管理导则
- 本科教学课件-职业健康与安全-王浩(完整)
- 干燥综合征诊疗指南及药物应用指南
- 人工智能导论-课件-第6章-计算机视觉
- 重大事故隐患排查表
- 德育与班级管理PPT完整全套教学课件
- 城市轨道交通车站设备PPT完整全套教学课件
- 职业学院教师教学工作规范
- 铜陵市源丽电子化学品有限公司年产100kt-aAR级精制硫酸项目环评报告
评论
0/150
提交评论