}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处 else
textAnswer.setText('-' + s); } }
//计算器有关内存操作 //'MC'的操作,将内存清0
if (temp == buttonMC && clickable == true) {
memoryd = memoryi = 0; textMemory.setText(\ }
//'MS'的操作,将当前文本框内容保存入内存,显示'M' if (temp == buttonMS && clickable == true) {
boolean isDot = false;
textMemory.setText(\小文本框显示M
for (int i = 0; i < textAnswer.getText().length(); i++) if ('.' == textAnswer.getText().charAt(i)) {
isDot = true; break; }
//如果是double,则存入memoryd(double存储器) if (isDot == true) {
memoryd = Double.parseDouble(textAnswer.getText()); memoryi = 0; //保证存储器中存放最新的值 }
//如果是int,则存入memoryi(int存储器) else {
memoryi = Integer.parseInt(textAnswer.getText()); memoryd = 0; //保证存储器中存放最新的值 } }
//'MR'的操作,将存储器中的信息输出 if (temp == buttonMR && clickable == true) {
if (memoryd != 0)
textAnswer.setText(Double.toString(memoryd)); if (memoryi != 0)
textAnswer.setText(Integer.toString(memoryi));
}
//'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器 if (temp == buttonMAdd && clickable == true) {
boolean isDot = false;
for (int i = 0; i < textAnswer.getText().length(); i++) if ('.' == textAnswer.getText().charAt(i)) {
isDot = true; break; }
if (memoryi != 0)
{ //存储中是一个int型数
if (isDot == false) //被加数是一个int型数
memoryi += Integer.parseInt(textAnswer.getText()); else
{//被加数是一个double型数,则将int存储器中数传入double存储器与当前数相加,int存储器清零
memoryd = memoryi + Double.parseDouble(textAnswer.getText()); memoryi = 0; } } else
memoryd += Double.parseDouble(textAnswer.getText()); }
//按下n!按钮,计算当前阶乘
if (temp == buttonN && clickable == true) { boolean isDot=false; int i,j,k; for (i=0;i } } if(isDot==true||textAnswer.getText().charAt(0)=='-'){ textAnswer.setText(\负数或小数不能求阶乘!\ clickable=false; } else { vard = Double.parseDouble(textAnswer.getText()); answerd=1; for(int counteri=1;counteri<=(int)vard;counteri++) { answerd *= counteri; } textAnswer.setText(Integer.toString((int)answerd)); prekey=5; } } //按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除 if (temp == buttonBk && clickable == true) { String s = textAnswer.getText(); textAnswer.setText(\ for (int i = 0; i < s.length() - 1; i++)//只要前面s.length() - 1位即最后一位删除 { char a = s.charAt(i); textAnswer.setText(textAnswer.getText() + a); } } //按下'CE'按钮,将当前文本框内数据清除 if (temp == buttonCe) { textAnswer.setText(\ clickable = true; } //按下'C'按钮,文本框内数据清除,同时var,answer清0 if (temp == buttonC) { vard = answerd = 0; textAnswer.setText(\ clickable = true; } //按下'复制'菜单栏 if (temp == copyItem) { copy = textAnswer.getText(); } //按下'粘贴'菜单栏 if (temp == pasteItem) { textAnswer.setText(copy); } if (temp == sItem) { JOptionPane.showMessageDialog(panel, \非常抱歉,当前只能是标准型计算器\ } //按下'帮助主题'菜单栏 if (temp == topHelp) { JOptionPane.showMessageDialog(panel, scrollHelp); } //按下'数字分组'菜单栏 if (temp == numberGroup) { if (numberGroup.getText().compareTo(\数字分组(I)\ numberGroup.setText(\√数字分组(I)\ else numberGroup.setText(\数字分组(I)\ } //按下'关于'菜单栏 if (temp == aboutCal) { JOptionPane.showMessageDialog(panel, \计算器-开发人员 王韩波 郭朝晖 陈自寅 \ } }//end of try //输入中如果有操作非法,捕获异常 catch (Exception e) { textAnswer.setText(\操作非法\ clickable = false; //键盘禁用 } } //主函数 public static void main(String args[]) { Calculator cl = new Calculator(); } } 四 程序运行、调试结果: 1、当运行该程序时,就会弹出下面的对话框: 2、当在对话框中输入数字12时,对话框会如下: 3、可以任意输入运算符,然后输入另一个数字即可。该程序执行该算式:12+34=? 4、输入以上结果后,计算器会显示如下结果: 五 实验中的问题 此次实验虽然仅仅是实现了一个简单的标准计算器,但其中遇到不少问题。尽管道路有点小曲折,可仔细回想一下收获颇丰。以下简要的列出其中几个有代表性的问题: 1) 关于“+,-,*,/”的优先级,参考了Windows XP中的计算机,考虑到其为标准计算 机,所以一律从左往右算; 2)关于String 和 double类型的转换,开始时未意识到这个问题,可是显示时一定要用toString方法转为String型,如 textAnswer.setText(Double.toString(dtemp)),而计算时一定要变为double型,如answerd *= Double.parseDouble(textAnswer.getText()); 3) textAnswer.getText().charAt(0) == '0'不能直接用textAnswer.getText()== '0' 一定要转 为char; 六 实验收获: 1) 2) 3) 4) 深入了解java语言,熟悉Swing组件的基本应用; 掌握软件开发的基本流程,为软件课设打好基础; 摒弃眼高手低的坏习惯,看似不复杂的东西,具体实践时总有各种各样的意料之外; 通过讨论分工等协作手段,培养了团队合作能力。 七 实验分工 ? 王XX:数字输入、+、-、*、/、=、%、1/x、sqrt、+/-运算实现、程序说明文档 ? 郭XX:界面实现、程序说明文档 ? 陈XX:菜单栏、MR、MC、M+、MS、CE、C、backspace、n!、运算实现、介绍PPT