Java科学计算器示例:面向对象编程实践

需积分: 50 28 下载量 20 浏览量 更新于2024-07-19 6 收藏 25KB DOCX 举报
Java模拟科学计算器是一个针对Java初学者设计的实用教学项目,它不仅实现了基础的算术运算,如加减乘除,还包含了额外的数学功能,如平方根、倒数等。这个计算器采用了面向对象的编程原则,通过创建一个名为`Ca`的JFrame类来构建用户界面,并利用`JButton`、`JTextField`等组件构建计算器的数字键盘、运算符按钮和结果展示区。 在代码实现上,项目首先导入了必要的Java GUI库,如`java.awt`和`javax.swing`,这些库为构建图形用户界面提供了基础组件。`Ca`类继承自`JFrame`,并实现了`ActionListener`接口,这使得按钮点击事件可以被正确处理。 在类中定义了多个静态字符串数组,分别用于存储计算器的数字键、操作键和清除键的标签,以及菜单栏中的各个选项。这些数组为创建相应的按钮和菜单项提供了数据支持。例如,`KEYS`数组用于创建数字和运算符按键,`M[]`和`COM[]`则分别用于模式切换和清除功能。 在类的私有成员变量中,定义了`JButton`类型的数组来存储所有的按钮实例,以及`JTextField`类型的`result`用于显示计算结果,`hh`和`jj`可能用于更复杂的数学操作,如分组显示或历史记录。 此外,还创建了一个`MenuBar`对象`menubar1`,并为它添加了`编辑`、`查看`和`帮助`三个主要菜单,每个菜单下又包含了具体的子菜单项,如复制、粘贴、标准型和科学型模式等。通过`MenuItem`类,这些菜单项提供了丰富的交互性。 在类的构造函数中,可能会初始化这些按钮和菜单,设置布局管理器,以及处理用户的输入逻辑,比如检查输入是否为数字、执行相应的计算操作等。同时,`firstDigit`变量用于判断输入的第一个字符,可能用于处理数字键与其他键的区别。 这个Java模拟科学计算器项目提供了一个实践面向对象编程和Java GUI编程的好机会,通过实际操作,学习者能够理解如何构建一个具备基本功能和扩展性的计算器应用程序,同时也熟悉了Java中的菜单系统和事件处理机制。
2014-06-27 上传
java 大作业 科学计算器 menu切换普通与科学计算器 部分代码: class MyKey extends KeyAdapter { public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); System.out.print(c); boolean bFlag = false; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(IfResult){ tf.setText(""); IfResult = false; } tf.setText(tf.getText().trim() + c); bFlag = true; break; case '.': if(tf.getText().trim().indexOf(".") == -1){ tf.setText(tf.getText() + "."); } bFlag = true; break; case '_': if(Double.parseDouble(tf.getText()) > 0){ if(tf.getText().length() > 1){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } }else{ if(tf.getText().length() > 2){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } } bFlag = true; break; case '+': if(flag){ IfResult = false; } if(IfResult){ oper = "+"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "+"; IfResult = true; } bFlag = true; break; case '-': if(flag){ IfResult = false; } if(IfResult){ oper = "-"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "-"; IfResult = true; } bFlag = true; break; case '*': if(flag){ IfResult = false; } if(IfResult){ oper = "*"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "*"; IfResult = true; } bFlag = true; break; case '/': if(flag){ IfResult = false; } if(IfResult){ oper = "/"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "/"; IfResult = true; } bFlag = true; break; case '=': if(flag){ IfResult = false; } if(IfResult){ oper = "="; }else{ getResult(Double.parseDouble(tf.getText())); oper = "="; IfResult = true; } bFlag = true; break; } if(bFlag && tf.getText().equals("0")){ tf.setText("0"); IfResult = true; flag = true; } } }