您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > java实验报告-计算器附源代码
1面向对象程序设计实验报告学院计算机科学与技术学院专业计算机科学与技术学号姓名指导教师2016年1月1日1一、实验目的参照Windows计算器功能,用java语言编写一个图形化计算器程序,实现加、减、乘、除等运算。二、实验题目Java计算器的编写三、实验内容importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCalculatorextendsJFrameimplementsActionListener{//定义字符型数组,存放按钮字符privatefinalString[]str={sqrt,+/-,CE,C,7,8,9,/,4,5,6,*,1,2,3,-,0,.,=,+};//定义按钮数组,用于实现上面的按钮字符JButton[]buttons=newJButton[str.length];//定义文本行,初始显示0JTextFielddisplay=newJTextField(0);//计算器构造函数publicCalculator(){super(计算器);//panel1是集合了数字和运算符的面板2JPanelpanel1=newJPanel(newGridLayout(5,4));for(inti=0;istr.length;i++){//把按钮数组加进来buttons[i]=newJButton(str[i]);panel1.add(buttons[i]);}this.addWindowListener(newWinClose());//panel2是文本域和归零面板JPanelpanel2=newJPanel(newBorderLayout());panel2.add(Center,display);getContentPane().setLayout(newBorderLayout());getContentPane().add(North,panel2);getContentPane().add(Center,panel1);//为每个数字和运算符按钮添加事件监听器for(inti=0;istr.length;i++)buttons[i].addActionListener(this);//为文本域添加事件监听器display.addActionListener(this);//设置窗口位置setBounds(500,200,400,400);//设置框架不能改变大小setResizable(false);//设置组件可见setVisible(true);3//调整此窗口的大小,以适合其子组件的首选大小和布局pack();}//value用来记录当前文本域的数值doublevalue=0;publicvoidactionPerformed(ActionEvente){Stringlabel=e.getActionCommand();if(label.equals(CE)){display.setText();}elseif(label.equals(C)){handleC();}elseif(label.equals(sqrt)){value=Double.parseDouble(display.getText());if(value0){display.setText(负数不存在平方根!);}else{value=Math.sqrt(value);display.setText(String.valueOf(value));}}4elseif(label.equals(+/-)){value=Double.parseDouble(display.getText())*(-1);display.setText(String.valueOf(value));}elseif(0123456789..indexOf(label)=0)/*(0123456789..indexOf(label)=0)意思是当前输入的数字是“0123456789”中的一个时,响应输入数字事件,和下面同效果*(label.equals(0)||label.equals(1)||label.equals(2)||label.equals(3)||label.equals(4)||label.equals(5)||label.equals(6)||label.equals(7)||label.equals(8)||label.equals(9)||label.equals(.))*/handleNumber(label);elsehandleOperator(label);}//设置布尔型变量,用于标记是否是第一次按下小数点,初始为是booleanisFirstDigit=true;//响应数字按钮publicvoidhandleNumber(Stringkey){if(isFirstDigit)display.setText(key);elseif((key.equals(.))&&(display.getText().indexOf(.)0))display.setText(display.getText()+.);5elseif(!key.equals(.))display.setText(display.getText()+key);isFirstDigit=false;}//归零按钮C响应publicvoidhandleC(){display.setText(0);isFirstDigit=true;operator==;}Doublenumber=0.0;Stringoperator==;//响应运算符按钮publicvoidhandleOperator(Stringkey){if(operator.equals(+)){number+=Double.valueOf(display.getText());display.setText(String.valueOf(number));}elseif(operator.equals(-)){number-=Double.valueOf(display.getText());display.setText(String.valueOf(number));}elseif(operator.equals(*)){number*=Double.valueOf(display.getText());6display.setText(String.valueOf(number));}elseif(operator.equals(/)){if(Double.parseDouble(display.getText())==0){display.setText(error:除数不能为0);}else{number/=Double.valueOf(display.getText());display.setText(String.valueOf(number));}}elseif(operator.equals(=)){number=Double.valueOf(display.getText());display.setText(String.valueOf(number));}operator=key;isFirstDigit=true;}publicstaticvoidmain(String[]args){//程序入口,新建计算器newCalculator();}}//实现窗口事件监听器接口classWinCloseimplementsWindowListener{publicvoidwindowClosing(WindowEventev){System.exit(0);}7publicvoidwindowsOpend(WindowEventev){}publicvoidwindowActivated(WindowEventev){}publicvoidwindowsDeactivated(WindowEventev){}publicvoidwindowClosed(WindowEventev){}publicvoidwindowIconified(WindowEventev){}publicvoidwindowDeiconified(WindowEventev){}@OverridepublicvoidwindowDeactivated(WindowEvente){//TODOAuto-generatedmethodstub}@OverridepublicvoidwindowOpened(WindowEvente){//TODOAuto-generatedmethodstub}}四、实验结果及分析(一、)程序功能测试:1、加法、减法、乘法、除法测试:20+0.5=20.5100-10.5=89.5820*20=4000/2=02/0报错1/2=0.52、Sqrt(开方)测试:√25=5负数开方报错3、+/-测试:9-2+1.5=-0.54、CE(清除当前输入项)和C(清除整个计算式)测试:计算10+20=30时输入10+22然后按下CE清除22,重新输入20。运算正确。(二、)出现过的问题及解救方案:1、运算数据可以随意输入,导致一个数据可以输入多个小数点,运算报错。修改思路:修改对数字按钮的事件监听的实现方法,定义一个布尔型的全局变量10isFirstDigit,判断此运算项是否已经有小数点,如果已经输入过,按下小数点无响应,防止输入多个小数点导致运算错误。2、算法对输入数据的运算检查不足,导致出现给负数开方以及除数为0的情况。修改思路:Sqrt按钮的事件监听增加对开方数的合理性检查,如果是负数,显示负数不能开方;增加对被除数的检查,如果被除数是0,显示除数不能是0。3、按下加减乘除按钮的时候第二个运算项没有输入,怎么执行的问题。解决思路:把运算数第一项用number记录下来,把运算符用operator记录下来,等到第二项数据被输入的时候再执行计算。(三、)心得感受:这是第一次用编程语言写出一个可交互的图形化界面,通过查找资料,理解其中的算法和事件的响应顺序,感觉很有成就感。第一次编写运行出现了很多错误,同时,通过程序测试也发现了很多的程序缺陷,经过不断地对算法和思路改进,最终基本实现了该有的功能。程序可以对输入的数据进行强制的规范,同时,对非法运算进行提醒。但是,对于10+20这种运算得出的结果是30.0,这对平时见到的30的运算结果来说还有待进一步细化。
本文标题:java实验报告-计算器附源代码
链接地址:https://www.777doc.com/doc-4231383 .html