java简易计算器设计思路
- 格式:docx
- 大小:37.47 KB
- 文档页数:2
一、设计内容和要求1、简单计算器模拟程序;2、功能要求:模拟Windows中附件里面的计算器软件,能实现整数的加、减、乘、除四则运算界面提示:用图形界面实现,可参考下图。
二、系统分析与概要设计设计的计算器可以完成加法、减法、乘法、除法的简单运算。
实现一些简单的扩展运算,如:正负号、退格、清零等功能。
使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。
根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,16个按钮,总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计三、详细设计和编码1、总体功能图2、类的定义及关系(1)类A的设计(数据的输入)class A implements ActionListener{public void actionPerformed(ActionEvent e){String a = Jtext.getText();String s = e.getActionCommand();if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/")) Jtext.setText(s);else{if(flag2){ Jtext.setText(s);flag2=false;}elseJtext.setText(a+s);}}}(2)类Opertion的设计:(运算符的控制)class Opertion implements ActionListener{public void actionPerformed(ActionEvent e){cal=e.getActionCommand();if(flag1==true)x=Jtext.getText();Jtext.setText(cal);flag1=false;}}3、运行效果图4、源代码主要代码:public class jsq extends WindowAdapter{private JTextField Jtext = new JTextField("0.");private JFrame f = new JFrame("简单计算器");private String x = "";private String y = "";private String cal = "";private boolean flag1 = true;private boolean flag2 = false;public void init(){ String[] buttonValue = new String[] { "1", "2", "3", "+", "4", "5", "6", "-", "7", "8", "9", "*", "0", ".", "/", "=" };Container contain = f.getContentPane();JPanel Jpan = new JPanel();JButton[] Jb = new JButton[16];contain.setLayout(new BorderLayout());Jpan.setLayout(new GridLayout(4, 4));Jtext.setHorizontalAlignment(JTextField.RIGHT);contain.add(Jtext, "North");contain.add(Jpan);A num = new A();Result re = new Result();Opertion op = new Opertion();for (int i = 0; i < Jb.length; i++){Jb[i] = new JButton(buttonValue[i]);Jpan.add(Jb[i]);if (i == 3 || i == 7 || i == 11 || i == 14)Jb[i].addActionListener(op);if (i == 0 || i == 1 || i == 2 || i == 4 || i == 5 || i == 6 || i == 8 || i == 9 || i == 10 || i == 12 || i == 14)Jb[i].addActionListener(num);Jb[i].setForeground(new Color(0, 0, 255));}四、测试结果验证:65-5=60五、小结该计算器基本运算没有问题,能完成一个计算器的基本功能,但仍有许多地方需要改进,如小数点还未实现功能。
信息科学与工程学院课程设计任务书题目:简单计算器的设计课程设计任务书及成绩评定目录一、选题的目的意义 (5)二、总体设计方案以及主要设计原理 (5)三、实现技术及源程序代码 (6)四、测试及分析 (14)五、结束语(心得体会、改进方向) (15)一、选题的目的意义1、进一步掌握和理解java程序编程;2、进一步掌握java语言的基本数据类型,熟悉定义变量和使用变量;3、理解java图形用户界面的基本工作原理和界面设计;4、巩固窗体的布局设计;5、掌握窗体按钮控件和文本控件对事件的响应;6、理解函数和方法的使用。
二、总体设计方案以及主要设计原理1、需求分析设计的计算器可以完成加法、减法、乘法、除法的简单运算及简单的函数运算2、设计思路(1)界面设计(2)设计思路根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,24个按钮.总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/,.,-,sqrt,sin,cos,in,CE,=等按钮放置到一个面板Panel中,完成界面设计。
三、实现技术及源程序代码import java.awt.*;import java.awt.event.*;public class Cal {public static void main(String[] args) {CalFrame f = new CalFrame();}}class CalFrame extends Frame {double d1, d2;int op = -1;TextField tf;CalPanelL p1;CalPanelR p2;// ConstructorCalFrame() {super("Small Calculator");setLayout(new FlowLayout(FlowLayout.CENTER,8,10));setBackground(new Color(100,150,150));setForeground(Color.white);setResizable(false);setSize(300,200);tf = new TextField(22);tf.setEditable(false);tf.setBackground(new Color(108,118,103));tf.setForeground(Color.white);tf.setFont(new Font("Arial",Font.BOLD,16));add(tf);p1 = new CalPanelL();p2 = new CalPanelR();add(p1);add(p2);setVisible(true);addWindowListener(new Wclose());}// inner class:CalButtonclass CalButton extends Button {CalButton(String s){super(s);setBackground(Color.gray);}}// inner class: CalPanelLclass CalPanelL extends Panel {CalButton b0, b1, b2, b3,b4, b5, b6, b7,b8, b9, bPN, bPoint;CalPanelL() {setLayout(new GridLayout(4,3));setFont(new Font("TimesRoman",Font.BOLD,16));b0 = new CalButton("0");b1 = new CalButton("1");b2 = new CalButton("2");b3 = new CalButton("3");b4 = new CalButton("4");b5 = new CalButton("5");b6 = new CalButton("6");b7 = new CalButton("7");b8 = new CalButton("8");b9 = new CalButton("9");bPN = new CalButton("+/-");bPoint = new CalButton(".");// 加入按钮add(b7); b7.addActionListener(new PressB7());add(b8); b8.addActionListener(new PressB8());add(b9); b9.addActionListener(new PressB9());add(b4); b4.addActionListener(new PressB4());add(b5); b5.addActionListener(new PressB5());add(b6); b6.addActionListener(new PressB6());add(b1); b1.addActionListener(new PressB1());add(b2); b2.addActionListener(new PressB2());add(b3); b3.addActionListener(new PressB3());add(b0); b0.addActionListener(new PressB0());add(bPN); bPN.addActionListener(new PressBPN()); ;add(bPoint); bPoint.addActionListener(new PressBPoint()); }}class CalPanelR extends Panel {CalButton bAdd, bSub, bMul, bDiv,bSqrt, bSin, bCos, bYx,bLn, bEqual, bCE, bBack;CalPanelR() {setLayout(new GridLayout(4,3));setFont(new Font("TimesRoman",Font.BOLD,16));bAdd = new CalButton("+");bSub = new CalButton("-");bMul = new CalButton("*");bDiv = new CalButton("/");bSqrt = new CalButton("sqrt");bSin = new CalButton("sin");bCos = new CalButton("cos");bYx = new CalButton("y^x");bLn = new CalButton("ln");bEqual = new CalButton("=");bCE = new CalButton("CE");bBack = new CalButton("<-");add(bDiv); bDiv.addActionListener(new PressBDiv());add(bSqrt); bSqrt.addActionListener(new PressBSqrt());add(bLn); bLn.addActionListener(new PressBLn());add(bMul); bMul.addActionListener(new PressBMul());add(bSin); bSin.addActionListener(new PressBSin());add(bBack); bBack.addActionListener(new PressBBack());add(bSub); bSub.addActionListener(new PressBSub());add(bCos); bCos.addActionListener(new PressBCos());add(bCE); bCE.addActionListener(new PressBCE());add(bAdd); bAdd.addActionListener(new PressBAdd());add(bYx); bYx.addActionListener(new PressBYx());add(bEqual); bEqual.addActionListener(new PressBEqual()); }}class PressBAdd implements ActionListener {public void actionPerformed(ActionEvent e) {try {d1 = Double.parseDouble(tf.getText());op = 0;tf.setText("");} catch(Exception ee) {}}}class PressBSub implements ActionListener {public void actionPerformed(ActionEvent e) {try {d1 = Double.parseDouble(tf.getText());op = 1;tf.setText("");} catch(Exception ee) {}}}class PressBMul implements ActionListener { public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 2;tf.setText("");} catch(Exception ee) {}}}class PressBDiv implements ActionListener { public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 3;tf.setText("");} catch(Exception ee) {}}}class PressBYx implements ActionListener {public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 4;tf.setText("");} catch(Exception ee) {}}}class PressBEqual implements ActionListener { public void actionPerformed(ActionEvent e) { try {double result = 0;d2 = Double.parseDouble(tf.getText()); switch(op) {case 0:result = d1 + d2;break;case 1:result = d1 - d2;break;case 2:result = d1 * d2;break;case 3:result = d1 / d2;break;case 4:result = Math.pow(d1,d2);break;default:}tf.setText(String.valueOf(result));} catch(Exception ee) {}}}class PressBSqrt implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.sqrt(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBLn implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.log(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBSin implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.sin(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBCos implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.cos(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBBack implements ActionListener {public void actionPerformed(ActionEvent e) {try {String text = tf.getText();text = text.substring(0,text.length()-1); tf.setText(text);} catch(Exception ee) {}}}class PressBCE implements ActionListener {public void actionPerformed(ActionEvent e) {tf.setText("");}}class PressBPN implements ActionListener {public void actionPerformed(ActionEvent e) {try {String text = tf.getText();if (text != "") {if(text.charAt(0) == '-')tf.setText(text.substring(1));else if(text.charAt(0) >= '0' && text.charAt(0) <= '9') tf.setText("-"+text.substring(0));else if(text.charAt(0) == '.')tf.setText("-0"+text.substring(0));}} catch(Exception ee) { }}}class PressBPoint implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();if(stIndexOf(".") == -1)tf.setText(text+".");}}class PressB0 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"0");}}class PressB1 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"1");}}class PressB2 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"2");}}class PressB3 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"3");}}class PressB4 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"4");}}class PressB5 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"5");}}class PressB6 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"6");}}class PressB7 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"7");}}class PressB8 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"8");}}class PressB9 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"9");}}// class: Wcloseclass Wclose extends WindowAdapter {public void windowClosing(WindowEvent e) {System.exit(0);}}}四、测试及分析1、简单的运算(1)78+43=121.0(2)10+20*30=610.02、总体分析本计算器为计算量中等,对函数要求不太高的人群适用。
简易计算器【案例介绍】1.案例描述本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。
2.运行结果运行结果【案例目标】●学会分析“简易计算器”程序实现的逻辑思路。
●能够独立完成“简易计算器”程序的源代码编写、编译及运行。
●掌握Java Swing界面编程的应用。
●了解计算器逻辑运算实现。
【案例分析】要制作一个计算器,首先要知道它由哪些部分组成,如下图所示:一个简单的图形化界面计算器,需要由界面组件、组件的时间监听器和具体的事件处理逻辑组成。
实现一个简易图形化界面计算器可分以下几个步骤:1.UI组件创建和初始化:包括窗体的创建,显示计算结果文本框、清除按钮、数字按钮、运算符等按钮的初始化。
2.在窗体中添加UI组件:包括放置数字键及运算符面板、放置清除框面板。
3.布局结束之后,就是计算器的难点:编写事件处理程序。
4.按键的响应实现。
5.计算逻辑的实现。
6.注册监听器【案例实现】Calculator.java1 package chapter1102;2 import java.awt.*;3 import java.awt.event.*;4 import javax.swing.*;5 import java.util.Vector;6 import java.math.BigDecimal;7 public class Calculator {8 // 操作数1,为了程序的安全,初值一定设置,这里我们设置为0。
9 String str1 = "0";10 // 操作数211 String str2 = "0";12 // 运算符13 String signal = "+";14 // 运算结果15 String result = "";16 // 以下k1至k5为状态开关17 // 开关1用于选择输入方向,将要写入str1或str218 // 为 1 时写入 str1,为 2 时写入 str219 int k1 = 1;20 // 开关 2 用于记录符号键的次数21 // 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算22 int k2 = 1;23 // 开关3用于标识 str1 是否可以被清 024 // 等于 1 时可以,不等于1时不能被清025 int k3 = 1;26 // 开关4用于标识 str2 是否可以被清 027 // 等于 1 时可以,不等于1时不能被清028 int k4 = 1;29 // 开关5用于控制小数点可否被录入30 // 等于1时可以,不为1时,输入的小数点被丢掉31 int k5 = 1;32 // store的作用类似于寄存器,用于记录是否连续按下符号键33 JButton store;34 //vt 存储之前输入的运算符。
java简易计算器实训报告Java简易计算器实训报告随着人们对数学和计算机的需求不断增长,计算器也成为了必备的工具之一。
而在计算机领域,Java语言因其跨平台和易于学习的特点而备受青睐。
因此,我选择了利用Java语言来编写一款简易计算器的实训项目。
一、需求分析在编写计算器之前,我们需要对其功能进行需求分析。
一般来说,计算器的功能包括加、减、乘、除等基本数学运算符,以及括号、百分号、小数点等其他计算功能。
在此基础上,我们可以考虑增加科学计算、历史记录、单位转换等功能。
二、设计思路及实现在需求分析的基础上,我们设计了一款基于Java语言的简易计算器。
其基本功能包括加、减、乘、除、括号、百分号、小数点等。
在实现过程中,我们采用了以下设计思路:1. 利用Java Swing构建GUI界面,让用户可以通过鼠标点击输入数字和运算符。
2. 通过Java的逻辑运算符实现基本的数学运算,包括加、减、乘、除等。
3. 利用Java的正则表达式判断用户输入的数字是否合法,并进行相应的处理。
4. 通过栈的数据结构实现括号运算,使得程序能够正确处理带有括号的数学表达式。
5. 实现百分号功能,使得用户可以快速进行百分比运算。
6. 通过Java的异常处理机制,处理用户输入不合法的情况,避免程序崩溃。
三、代码实现在代码实现过程中,我们主要采用了Java Swing和Java核心库中的一些类和方法。
以下是代码的核心部分:1. GUI界面代码在Java Swing中,我们可以通过JFrame、JPanel、JButton等组件构建出一个GUI界面,使得用户可以通过鼠标点击输入数字和运算符。
以下是界面代码的核心部分:JPanel panel = new JPanel();panel.setLayout(new GridLayout(4,4));//数字按钮panel.add(new JButton("7"));panel.add(new JButton("8"));panel.add(new JButton("9"));panel.add(new JButton("/"));panel.add(new JButton("4"));panel.add(new JButton("5"));panel.add(new JButton("6"));panel.add(new JButton("*"));panel.add(new JButton("1"));panel.add(new JButton("2"));panel.add(new JButton("3"));panel.add(new JButton("-"));panel.add(new JButton("0"));panel.add(new JButton("."));panel.add(new JButton("+"));panel.add(new JButton("("));panel.add(new JButton(")"));panel.add(new JButton("%"));2. 数学运算代码在Java中,我们可以通过逻辑运算符实现基本的数学运算。
java实验报告——简单计算器的编写五篇范文第一篇:java实验报告——简单计算器的编写JAVA实验报告——简单计算器的编写班级:学号:姓名:一、实验目的1.掌握java图形用户界面(GUI)的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.掌握常用组件的事件接口4.应用awt和swing组件进行应用程序设计二、实验条件1.计算机一台2.java软件开发环境三、实验步骤1、编写代码:mport java.awt.*;import java.awt.event.*;import javax.swing.*;public class JCalculator extends JFrame implements ActionListener {private static final long serialVersionUID =-***457Lprivate class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we){System.exit(0);}}int i;private final String[] str = { “7”, “8”, “9”, “/”, “4”, “5”, “6”, “*”, “1”,“2”, “3”, “-”, “.”, “0”, “=”, “+” };JButton[] buttons = new JButton[str.length]; JButton reset = new JButton(“CE”); JTextField display = new JTextField(“0”);public JCalculator(){super(“Calculator”);JPanel panel1 = new JPanel(new GridLayout(4, 4)); for(i = 0;i < str.length;i++){buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout()); panel2.add(“Center”, display);panel2.add(“East”, reset);getContentPane().setLayout(new BorderLayout()); getContentPane().add(“North”, panel2); getContentPane().add(“Center”, panel1);for(i = 0;i < str.length;i++)buttons[i].addActionListener(this);reset.addActionListener(this);display.addActionListener(this); addWindowListener(new WindowCloser()); setSize(800, 800);setVisible(true);pack();}public void actionPerformed(ActionEvent e){ Object target = e.getSource();String label = e.getActionCommand();if(target == reset)handleReset();else if(“0123456789.”.indexOf(label)> 0)handleNumber(label);elsehandleOperator(label);}boolean isFirstDigit = true;public void handleNumber(String key){if(isFirstDigit)display.setText(key);else if((key.equals(“.”))&&(display.getText().indexOf(“.”)< 0))display.setText(display.getText()+ “.”);else if(!key.equals(“.”))display.setText(display.getText()+ key);isFirstDigit = false;}public void handleReset(){display.setText(“0”);isFirstDigit = true;operator = “=”;}double number = 0.0;String operator = “=”;public void handleOperator(String key){if(operator.equals(“+”))number += Double.valueOf(display.getText());else if(operator.equals(“-”))number-= Double.valueOf(display.getText());else if(operator.equals(“*”))number *= Double.valueOf(display.getText());else if(operator.equals(“/”))number /= Double.valueOf(display.getText());else if(operator.equals(“=”))number = Double.valueOf(display.getText());display.setText(String.valueOf(number));operator = key;isFirstDigit = true;}public static void main(String[] args){new JCalculator();} }2、运行结果,见截图计算测试:123+456=579结果正确,程序无误。
基于java的简易计算器的设计摘要自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了C语言中指针特点,因而变得简单了很多。
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,其具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
本文介绍了用java语言编写一个简易计算器。
实现数学上的加、减、乘、除、乘方、开方、阶乘、正弦、余弦运算等相关运算。
利用这个程序可以方便的进行日常性的小规模运算,小巧简易,是个实用的工具。
关键词:程序设计;简易计算器;java语言THE DESIGN OF SIMPLE CALCULATOR BASED ON JA V AABSTRACTSince the inception of the java language, java language Take irresistible trend soon beca me widespread international popular object-oriented programming language, both with advan ced language features, and less of the C language pointer characteristics, and thus becomes a l ot simpler . Java is a cross-platform application software can write object-oriented programmi ng language, which has excellent versatility, efficiency, platform portability, and security, are widely used in personal PC, data center, gaming consoles, scientific super-computers, mobile phones and the Internet, also has the world's largest developer of professional community. In t he global cloud computing and mobile Internet industry environment, Java and more have sig nificant advantages and broad prospects.This article describes the use java language a simple calculator. Achieve mathematical addition, subtraction, multiplication, division, involution, evolution, factorial, sine, cosine op erations and other related operations. With this program you can easily carry out daily operati ons of small-scale, small simple, is a useful tool.Key words:program design;simple calculator;java language目录1前言 (1)1.1 课程设计背景 (1)1.2 需求环境 (1)1.3 课程设计思路 (1)2课程设计概要 (2)3 计算器详细设计 (3)3.1 计算器界面……….………….........………………………………………. .33.1.1 CAL主类的显示分布 (3)3.1.2计算器显示界面实现代码 (3)3.2 监听各个按钮的类 (5)3.2.1 编写监听类目的 (5)3.2.2 监听类实现代码 (5)3.3 按键响应类 (7)3.3.1 响应类编写的目的 (7)3.2.2 响应类实现代码 (7)3.3 运算处理类 (9)3.3.1 处理方式 . (9)3.2.2 处理类实现代码 (9)4 运行与调试 (12)4.1 进入程序主界面 (12)4.2 加减乘除功能实现 (12)4.3 正余弦、正切功能实现 (13)4.4 阶乘功能实现 (13)4.5 乘方、开方功能实现 (14)5 实验总结 (15)参考文献 (16)附录:源代码 (17)1 前言1.1 课程设计背景日常生活中我们经常会遇到一些小型数据计算的问题,本课程设计就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。
简易计算器总结1、计算器设计背景日常生活中我们经常会遇到一些小型数据计算的问题,本课程就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。
在java语言当中通过定义类,类中的各种方法实现对计算器相关功能的实现,并通过与用户自己手动输入并选择运算功能实现计算功能,是一个完全由用户控制的简易计算器。
2、需求环境硬件要求:一台计算机。
软件配置:WINDOWS系统、JDK 1.7、myeclipse3、计算器设计思路计算器最主要的就是实用性,要简单,便于操作。
程序界面是一个窗口的形式展现并由用户自己完全手动控制。
并以设计的要求为基础,在实现课程设计所给的功能以外,要对界面的美观进行了优化,看起来更人性化。
4、计算器实现代码package com.cqeec.sc;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.BevelBorder;public class Calculator extends JFrame {private static final long serialVersionUID = 1L;// 定义一级菜单名称private final String[] ONE_MENU_NAME = { "编辑(E)", "查看(V)", "帮助(H)" };// 定义一级菜单的热键private final int[] ONE_MENU_MNEMONIC = { KeyEvent.VK_E, KeyEvent.VK_V, KeyEvent.VK_H };// 定义菜单private JMenu[] oneMenu;// 定义显示器private JTextField display;// 定义左边面板MC、MR、MS、M+操作按钮标签private static final String[] BUTTON_MX_NAME = { "MC", "MR", "MS", "M+" };// 定义左边面板MC、MR、MS、M+操作按钮private JButton[] buttonMX;// 定义清除系列按钮标签private static final String[] BUTTON_CLEAR_NAME = { "Backspace", "CE", "C" };// 定义清除系统按钮private JButton[] buttonClear;// 定义数字,运算符,功能等按钮private static final String[] BUTTON_AN_NAME = { "1/x", "log", "7", "8", "9", "÷", "n!", "sqrt", "4", "5", "6", "×", "sin", "x^2", "1", "2","3", "-", "cos", "x^3", "0", "±", ".", "+", "tan", "%", "π", "e","\' \"", "=" };private JButton[] buttonAN;// M的值private double m;// 计算器标签,同时也用于显示M变量的值private JLabel labelCalculator;// 结果private double result;// 标志量,true表示开始新的输入,false表示不是private boolean isStratNewInput;// 保存运算符private String operator = "=";public Calculator() {this.setFrame();// 创建菜单this.createMenu();}private void setFrame() {// 设置窗体标题this.setTitle("计算器");// 改变大小this.setSize(500, 400);// 使窗体居于屏幕中间this.setLocationRelativeTo(null);// 设置窗体的默认关闭操作this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 让窗体不能改变大小this.setResizable(false);// 更改窗体的图标this.setIconImage(new ImageIcon("images/jisuanqi.jpg").getImage());}private void createMenu() {JMenuBar menuBar = new JMenuBar();// 创建菜单oneMenu = new JMenu[ONE_MENU_NAME.length];// 通过循环将一级菜单创建出来并添加到菜单栏for (int i = 0; i < ONE_MENU_NAME.length; i++) {// 创建一级菜单并保存到数组oneMenu[i] = new JMenu(ONE_MENU_NAME[i]);// 设置一级菜单栏热键oneMenu[i].setMnemonic(ONE_MENU_MNEMONIC[i]);// 将一级菜单添加到菜单栏menuBar.add(oneMenu[i]);}// 将菜单栏添加到窗体this.setJMenuBar(menuBar);// 获取窗体的内容面板的布局管理器BorderLayout layout = (BorderLayout) this.getContentPane().getLayout();// 设置垂直间距layout.setVgap(5);// 创建显示器display = new JTextField("0");display.setHorizontalAlignment(JTextField.RIGHT);// 设置字体大小display.setFont(new Font("", Font.ITALIC, 38));// 设置禁用显示器display.setEnabled(false);// 设置显示器与文本距离display.setMargin(new Insets(5, 0, 5, 5));// 设置显示器位置this.add(display, BorderLayout.NORTH);// 创建左边面板JPanel leftPanel = new JPanel(new GridLayout(5, 1, 0, 5)); // 设置面板的宽度leftPanel.setPreferredSize(new Dimension(80, 80));// 创建计算器标签labelCalculator = new JLabel("计算器");// 设置标签文字居中对齐labelCalculator.setHorizontalAlignment(JLabel.CENTER);// 设置计算器标签凹下去的效果labelCalculator.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));// 将计算器面板添加到左面板上leftPanel.add(labelCalculator);MAction mAction = new MAction();// 创建M系列按钮// 分配M系列按钮数组大小buttonMX = new JButton[BUTTON_MX_NAME.length];// 循环创建M系列按钮for (int n = 0; n < BUTTON_MX_NAME.length; n++) { // 创建按钮并存入数组中buttonMX[n] = new JButton(BUTTON_MX_NAME[n]);// 设置按钮不要焦点框buttonMX[n].setFocusable(false);// 设置按钮前景色buttonMX[n].setForeground(Color.red);// 设置按钮动作命令buttonMX[n].setActionCommand(BUTTON_MX_NAME[n]);buttonMX[n].addActionListener(mAction);// 添加按钮动作监听buttonMX[n].addActionListener(mAction);if (n == 0 || n == 1) {buttonMX[n].setEnabled(false);}// 将按钮添加到左面板上leftPanel.add(buttonMX[n]);}// 将左面板添加到窗体的左边this.add(leftPanel, BorderLayout.WEST);// 定义右面板JPanel rightPanel = new JPanel(new BorderLayout(0, 5));// 定义Backspace、CE、C按钮Clear clearProcess = new Clear();JPanel topPanel = new JPanel(new GridLayout(1, 3, 6, 0)); topPanel.setPreferredSize(new Dimension(0, 40));buttonClear = new JButton[BUTTON_CLEAR_NAME.length];for (int i = 0; i < BUTTON_CLEAR_NAME.length; i++) { buttonClear[i] = new JButton(BUTTON_CLEAR_NAME[i]);buttonClear[i].setFocusable(false);buttonClear[i].setForeground(Color.BLACK);buttonClear[i].setActionCommand(BUTTON_CLEAR_NAME[i]);buttonClear[i].addActionListener(clearProcess);topPanel.add(buttonClear[i]);}// 将Backspace、CE、C按钮面板放到右面板北边rightPanel.add(topPanel, BorderLayout.NORTH);// 定义数字按钮事件处理程序类对象NumAction numAction = new NumAction();SignAction signAction = new SignAction();// 定义数字、运算符、功能等按钮JPanel bottomPanel = new JPanel(new GridLayout(5, 6, 8, 8)); buttonAN = new JButton[BUTTON_AN_NAME.length];for (int i = 0; i < BUTTON_AN_NAME.length; i++) { buttonAN[i] = new JButton(BUTTON_AN_NAME[i]);buttonAN[i].setFocusable(false);// 设置按钮动作命令buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);// 为数字按钮添加监听if ("0123456789±".contains(BUTTON_AN_NAME[i])) {buttonAN[i].addActionListener(numAction);}if (".".equals(BUTTON_AN_NAME[i])) {buttonAN[i].addActionListener(new DotAction());}// 定义按钮文字颜色if ("÷×-+=".indexOf(BUTTON_AN_NAME[i]) >= 0) {buttonAN[i].setForeground(Color.RED);buttonAN[i].addActionListener(signAction);} else if ("πe\' \"".indexOf(BUTTON_AN_NAME[i]) >= 0) {buttonAN[i].setForeground(Color.YELLOW);buttonAN[i].addActionListener(signAction);} else if ("0123456789±.".indexOf(BUTTON_AN_NAME[i]) >= 0) { buttonAN[i].setForeground(Color.BLUE);buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);buttonAN[i].addActionListener(signAction);} else {buttonAN[i].setForeground(Color.MAGENTA);buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);buttonAN[i].addActionListener(signAction);}bottomPanel.add(buttonAN[i]);// 将数字、运算符、功能等按钮面板放到右面板的中间rightPanel.add(bottomPanel, BorderLayout.CENTER);// 将右面板添加到窗体this.add(rightPanel, BorderLayout.CENTER);// 显示窗体this.setVisible(true);}}/** 数字、±(正负号)按钮事件处理程序类*/class NumAction implements ActionListener {public void actionPerformed(ActionEvent e) {// 获取事件源对象传过来的动作命令String cmd = e.getActionCommand();if (isStratNewInput) {display.setText("");isStratNewInput = false;}if ("±".equals(cmd)) {// 正负号if ("0".equals(display.getText())) {display.setText("-");} else {double num;String strNum = display.getText();if (strNum.contains(".")) {num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num);} else {num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num);if (strNum.contains("E")) {} else {strNum = strNum.substring(0, strNum.length() - 2);}}display.setText(strNum);}} else {// 数字if ("0".equals(display.getText())) {display.setText("");}display.setText(display.getText() + cmd);}}}/*** 小数点按钮事件处理程序*/class DotAction implements ActionListener {public void actionPerformed(ActionEvent e) {if (!display.getText().contains(".")) {display.setText(display.getText() + ".");}}}/*** Backspace、CE、C按钮事件处理程序类*/class Clear implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();if ("Backspace".equals(cmd)) {// 删除一个String strNum = display.getText();if (strNum.length() == 0 || "0".equals(strNum)) {strNum = "0";} else {strNum = strNum.substring(0, strNum.length() - 1);strNum = "".equals(strNum) ? "0" : strNum;}display.setText(strNum);} else if ("CE".equals(cmd)) {// 清除显示器上的数字,显示零display.setText("0");} else if ("C".equals(cmd)) {// 清除M存储的值和显示器上的数字,显示零display.setText("0");labelCalculator.setText("计算器");m = 0;result = 0;isStratNewInput = false;}}}/*** MC、MR、MS、M+按钮事件处理程序类*/class MAction implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();if ("MC".equals(cmd)) {labelCalculator.setText("计算器");m = 0;buttonMX[0].setEnabled(false);buttonMX[1].setEnabled(false);} else if ("MR".equals(cmd)) {String strM = String.valueOf(m);if (strM.charAt(strM.length() - 1) == '0') {strM = strM.substring(0, strM.length() - 2);}display.setText(strM);} else if ("MS".equals(cmd)) {String strNum = display.getText();m = Double.parseDouble(strNum);strNum = String.valueOf(m);if (strNum.charAt(strNum.length() - 1) == '0') {strNum = strNum.substring(0, strNum.length() - 2);}labelCalculator.setText(String.valueOf(m));buttonMX[0].setEnabled(true);buttonMX[1].setEnabled(true);} else if ("M+".equals(cmd)) {m = m + m;labelCalculator.setText(String.valueOf(m));buttonMX[0].setEnabled(true);buttonMX[1].setEnabled(true);}}}class SignAction implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();double num = Double.parseDouble(display.getText());if ("1/x".equals(cmd)) {if (num == 0) {// 弹出提示JOptionPane.showMessageDialog(null,"<html>分母<span style=\"color:red;\">不能</span>为零!</html>","错误", JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(1 / num));}} else if ("log".equals(cmd)) {if (num <= 0) {// 弹出提示JOptionPane.showMessageDialog(null, "输入的指数必须大于零", "错误",JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(Math.log(num)));}} else if ("n!".equals(cmd)) {if (num < 0) {JOptionPane.showMessageDialog(null, "计算阶乘的数不能小于零", "错误",JOptionPane.ERROR_MESSAGE);} else {double s = 1;for (int i = 1; i < num; i++) {s *= i;}display.setText(String.valueOf(s));}} else if ("sqrt".equals(cmd)) {if (num <= 0) {// 弹出提示JOptionPane.showMessageDialog(null, "输入的数必须大于零", "错误",JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(Math.sqrt(num)));}} else if ("sin".equals(cmd)) {display.setText(String.valueOf(Math.sin(num)));} else if ("x^2".equals(cmd)) {display.setText(String.valueOf(Math.pow(num, 2)));} else if ("cos".equals(cmd)) {display.setText(String.valueOf(Math.cos(num)));} else if ("x^3".equals(cmd)) {display.setText(String.valueOf(Math.pow(num, 3)));} else if ("tan".equals(cmd)) {display.setText(String.valueOf(Math.tan(num)));} else if ("%".equals(cmd)) {num = num / 100;display.setText(String.valueOf(num));} else if ("π".equals(cmd)) {display.setText(String.valueOf(Math.PI));} else if ("e".equals(cmd)) {String strNum = display.getText();if (strNum.contains(".")) {String strZS;// 小数strNum = String.valueOf(Double.parseDouble(strNum));if (strNum.contains("E")) {display.setText(strNum.replace('E', 'e'));} else {// 取整数部分strZS = strNum.substring(0, strNum.indexOf("."));// 判断小数的整数部分长度是否大于1strZS = String.valueOf(Math.abs(Long.parseLong(strZS)));if (strZS.length() > 1) {// 左移小数点strZS = strZS.substring(0, 1)+ "."+ strZS.substring(1, strZS.length())+ strNum.substring(strNum.indexOf(".") + 1,strNum.length()) + "e+"+ (strZS.length() - 1);if (strNum.contains("-")) {strZS = "-" + strZS;}display.setText(strZS);} else {if ("0".equals(strZS) || "-0".equals(strZS)) {// 取出小数部分String strXS = strNum.substring(strNum.indexOf(".") + 1,strNum.length());// 统计小数点后零的个数+1(次方数)int count = 0;for (int i = 0; strXS.charAt(i) == '0'; i++) {count++;}count = count + 1;// 取出底数strXS = String.valueOf(Long.parseLong(strXS));strXS = strXS.substring(0, 1) + "."+ strXS.substring(1, strXS.length());// 连接strNum = strXS + "e-" + count;} else {// 不动strNum = strNum + "e+0";}display.setText(strNum);}}} else {// 不是小数double ds;if (strNum.contains("-")) {ds = Double.parseDouble(strNum.substring(0, 2) + "."+ strNum.substring(2, strNum.length()));} else {ds = Double.parseDouble(strNum.substring(0, 1) + "."+ strNum.substring(1, strNum.length()));}strNum = String.valueOf(ds) + "e+" + (strNum.length() - 1);display.setText(strNum);}} else if ("\' \"".equals(cmd)) {} else if ("÷".equals(cmd)) {calculate(cmd);} else if ("×".equals(cmd)) {calculate(cmd);} else if ("+".equals(cmd)) {calculate(cmd);} else if ("-".equals(cmd)) {calculate(cmd);} else if ("=".equals(cmd)) {calculate(cmd);}}public void calculate(String opr) {// 取当前显示器上的数double n = Double.parseDouble(display.getText());// 根据上一次的运算符进行计算if ("÷".equals(operator)) {result /= n;// result=result/n;} else if ("×".equals(operator)) {result *= n;} else if ("+".equals(operator)) {result += n;} else if ("-".equals(operator)) {result -= n;} else if ("=".equals(operator)) {result = n;}// 将计算的结果显示到显示器上display.setText(String.valueOf(result));// 将新输入的运算符存入到原operator = opr;// 开启一个新数的输入isStratNewInput = true;}}}5、计算器实现实例6、计算器设计总结虽然在这次的课程设计中有很多的不足,但是我也收获了很多。
用Java实现的计算器计算器是一个广泛应用的工具,用于进行数学运算。
如今,随着计算机技术的不断发展,计算器也逐渐被软件程序所替代。
本文将介绍如何使用Java语言实现一个简单的计算器程序。
一、程序概述计算器程序主要包括用户界面和计算逻辑两部分。
用户界面负责显示计算器的按钮和输入输出框,计算逻辑负责根据用户输入进行运算并返回结果。
二、用户界面设计在Java中,我们可以使用Swing或JavaFX等图形库来设计用户界面。
本文选用JavaFX来实现计算器的界面。
界面需要包括数字按钮、运算符按钮、输入输出框等组件。
在程序启动时,我们需要初始化界面并设置各个组件的位置、大小和样式。
为了方便布局,我们可以使用GridPane等布局管理器来管理组件。
三、计算逻辑实现1. 表达式解析计算器需要将用户输入的表达式解析为计算机可以识别的格式。
Java中可以使用正则表达式或者逆波兰表达式来解析表达式。
本文选用简单的正则表达式方法进行解析。
2. 运算逻辑解析表达式后,我们需要根据运算符的优先级进行运算。
Java中可以使用栈来实现运算符的优先级判断和运算。
我们可以定义一个操作数栈和一个运算符栈,按照规则将表达式中的数字和运算符依次入栈,并根据运算符的优先级进行运算并将结果入栈。
四、完整代码示例import javafx.application.Application;import javafx.geometry.Insets;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.TextField;import yout.GridPane;import javafx.stage.Stage;public class Calculator extends Application {private TextField inputField; // 输入框private Button[] numberButtons; // 数字按钮private Button[] operatorButtons; // 运算符按钮@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("计算器");primaryStage.setResizable(false);// 初始化界面GridPane gridPane = new GridPane();gridPane.setHgap(10);gridPane.setVgap(10);gridPane.setPadding(new Insets(10));// 初始化输入框inputField = new TextField();inputField.setEditable(false);inputField.setPrefHeight(40);inputField.setMaxWidth(Double.MAX_VALUE);gridPane.add(inputField, 0, 0, 4, 1);// 初始化数字按钮numberButtons = new Button[10];for (int i = 0; i < 10; i++) {numberButtons[i] = createNumberButton(String.valueOf(i), i); }gridPane.add(numberButtons[7], 0, 1);gridPane.add(numberButtons[9], 2, 1);gridPane.add(numberButtons[4], 0, 2);gridPane.add(numberButtons[5], 1, 2);gridPane.add(numberButtons[6], 2, 2);gridPane.add(numberButtons[1], 0, 3);gridPane.add(numberButtons[2], 1, 3);gridPane.add(numberButtons[3], 2, 3);gridPane.add(numberButtons[0], 0, 4);gridPane.add(createDotButton(), 1, 4);gridPane.add(createEqualButton(), 2, 4);// 初始化运算符按钮operatorButtons = new Button[4];operatorButtons[0] = createOperatorButton("+"); operatorButtons[1] = createOperatorButton("-"); operatorButtons[2] = createOperatorButton("*"); operatorButtons[3] = createOperatorButton("/"); gridPane.add(operatorButtons[0], 3, 1);gridPane.add(operatorButtons[1], 3, 2);gridPane.add(operatorButtons[3], 3, 4);Scene scene = new Scene(gridPane);primaryStage.setScene(scene);primaryStage.show();}private Button createNumberButton(String text, int number) { Button button = new Button(text);button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + number);});return button;}private Button createDotButton() {Button button = new Button(".");button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + ".");});return button;}private Button createEqualButton() {Button button = new Button("=");button.setPrefSize(60, 40);button.setOnAction(e -> {String expression = inputField.getText();// 调用计算逻辑进行计算if (expression != null && !expression.isEmpty()) { double result = calculate(expression);inputField.setText(String.valueOf(result));}});return button;}private Button createOperatorButton(String text) {Button button = new Button(text);button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + text);});return button;}private double calculate(String expression) {// 进行计算逻辑的实现// ...}public static void main(String[] args) {launch(args);}}五、总结通过本文的介绍,我们可以了解到使用Java语言实现一个简单计算器的基本框架和思路。
⽤JAVA作⼀个简单的计算器刚刚学java不久尝试着做了⼀个简单的计算器接下来讲讲我的思路1.创建⼀个main函数public static void main(String[] args){}2.创建对象调⽤函数public static void main(String[] args){Demo06 demo06 = new Demo06();//创建对象调⽤函数}3.创建scanner函数获取⽤户的数据public static void main(String[] args){Demo06 demo06 = new Demo06();//创建对象调⽤函数Scanner scanner = new Scanner(System.in);//scanner创建,获取⽤户数据}4.输⼊第⼀个值public static void main(String[] args){Demo06 demo06 = new Demo06();//创建对象调⽤函数Scanner scanner = new Scanner(System.in);//scanner创建,获取⽤户数据System.out.println("请输⼊⼀个值");}5.double 数据定义⽤⽤nextdouble 接受double的第⼀个数据public static void main(String[] args){Demo06 demo06 = new Demo06();//创建对象调⽤函数Scanner scanner = new Scanner(System.in);//scanner创建,获取⽤户数据System.out.println("请输⼊⼀个值");double a = scanner.nextDouble();//接受double类型的数据}6.注意这⾥可以分解,可以再输出⼀个运算符,为了清楚可以这么写,但没必要,string定义符号是字符型接受⽤next // System.out.println("请输⼊运算符:");String operator = scanner.next();//接收字符串数据注意:这边说下之前next 和nextline 区别 next 是不能够空格的,就算空格也只能够取前⾯的,⽽ nextline 可以把空格后⾯的都能够取到7.double 数据定义⽤ nextdouble 接受double的第⼆个数据// System.out.println("请输⼊⼀个数");double b = scanner.nextDouble();//接受double类型的数据注意:这边也是⼀样可以再写⼀个输出8.⽤double类型来定义结果 resultdouble result = 0;9.接下来要写外部的⽅法了,分别定义加减乘余,并返回⽅法public static double add(double a,double b){return a+b;}//加法public static double minus(double a,double b){return a-b;}//减法public static double multiply(double a,double b){return a*b;}//乘法public static double divide(double a,double b){return a/b;}//除法public static double remainder(double a,double b){return a%b;}//余10.回到主函数分别来调⽤外⾯的⽅法,这⾥⽤if else if 来判断是否输⼊的⽅法等等于当前的符号if ("+".equals(operator)){//如果输⼊的运算符等于加号就进来result = add(a,b);//结果,调⽤加}else if("-".equals(operator)){result = minus(a,b);//结果,调⽤减}else if("*".equals(operator)){result = multiply(a,b);//结果,调⽤乘}else if("/".equals(operator)){result = divide(a,b);//结果,调⽤除}else if("%".equals(operator)){result = remainder(a,b);//结果,调⽤余}注意:"-".equals(operator), "".equals()这个⽅式是字符串的== ,⽤来判断字符串的相等的,切记不能够⽤==,会报错11.最后输出结果System.out.println("结果:"+result);12.奉上完整的代码package com.lx.method;import java.util.Scanner;public class Demo06 {//做⼀个简单的计算器public static double add(double a,double b){return a+b;}//加法public static double minus(double a,double b){return a-b;}//减法public static double multiply(double a,double b){return a*b;}//乘法public static double divide(double a,double b){return a/b;}//除法public static double remainder(double a,double b){return a%b;}//余public static void main(String[] args) {Demo06 demo06 = new Demo06();//创建对象调⽤函数Scanner scanner = new Scanner(System.in);//scanner创建,获取⽤户数据System.out.println("请输⼊⼀个值");double a = scanner.nextDouble();//接受double类型的数据// System.out.println("请输⼊运算符:");String operator = scanner.next();//接收字符串数据// System.out.println("请输⼊⼀个数");double b = scanner.nextDouble();//接受double类型的数据double result = 0;if ("+".equals(operator)){//如果输⼊的运算符等于加号就进来result = add(a,b);}else if("-".equals(operator)){result = minus(a,b);}else if("*".equals(operator)){result = multiply(a,b);}else if("/".equals(operator)){result = divide(a,b);}else if("%".equals(operator)){result = remainder(a,b);}System.out.println("结果:"+result);}}结果:莫%运算在上⾯结果中我就在来说下% 运算吧,从刚刚结果看来我们得出以下⼏个要点1. 如果 a % b , a>b ,那么外⾯就拿a除以b余下来的值,我们拿余下来的数20 %11 = 92. 如果a % b , a=b ,那么等于b 相除下来余数就是0 ,我们就拿 020 % 10 = 03. 如果 a % b , a<b , 那么我们就拿a的⾃⼰20 % 1000 = 20。
java计算器的设计思路我们需要设计一个用户界面,以便用户可以方便地输入算术表达式。
在Java中,我们可以使用图形用户界面(GUI)库,如Swing或JavaFX,来创建计算器的界面。
界面应该包含数字按钮、运算符按钮和其他功能按钮(如清除、等于和删除按钮)。
这些按钮应该被布局和组织在一个合适的方式,以便用户可以轻松地使用它们。
接下来,我们需要处理用户输入。
当用户点击数字按钮时,我们应该能够捕获并显示该数字。
我们可以使用事件处理机制来实现这一点,当用户点击按钮时,触发相应的事件处理方法。
在这些方法中,我们可以将数字添加到一个字符串变量中,以便最终构建用户输入的算术表达式。
除了数字按钮,我们还需要处理运算符按钮。
当用户点击运算符按钮时,我们应该能够捕获并显示该运算符。
类似地,我们可以使用事件处理机制来实现这一点,并将运算符添加到算术表达式字符串中。
在处理用户输入之后,我们需要实现计算逻辑。
我们可以使用Java 的数学库函数来执行基本的算术运算,如加法、减法、乘法和除法。
我们可以根据用户输入的算术表达式来调用适当的函数,并将结果显示给用户。
我们还可以添加其他功能,如清除按钮,用于清除用户输入的算术表达式。
我们可以通过将算术表达式字符串重置为空字符串来实现这一点。
还可以添加删除按钮,用于删除用户输入的最后一个字符。
在实现计算器的设计思路时,我们还应该考虑错误处理。
例如,当用户输入无效的算术表达式时,我们应该能够捕获并显示错误消息。
我们可以使用异常处理机制来实现这一点,捕获可能发生的异常并显示适当的错误消息给用户。
除了基本的计算功能,我们还可以扩展计算器的功能。
例如,我们可以添加科学计算功能,如三角函数、指数函数和对数函数。
我们可以在界面上添加相应的按钮,并在计算逻辑中调用适当的数学库函数。
总结起来,设计一个Java计算器需要考虑界面设计、用户输入处理和计算逻辑的实现。
我们可以使用Java的GUI库来创建计算器的界面,并使用事件处理机制来处理用户输入。
题目:JAVA简易计算器班级: 10计算机学号:姓名:利用JAVA语言设计一个简单的科学计算器,实现加减乘除及开根号、退格、清空,求倒数的简单功能。
由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。
虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。
所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
一、设计思路利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。
二、软件编程。
程序名: JavaJisuanqi.Java程序代码及其分析:import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;public class JiSuanQi extends JFrame implements ActionListener{JFrame frame;private JButton jia=new JButton("+");private JButton jian=new JButton("-");private JButton cheng=new JButton("*");private JButton chu=new JButton("/");private JButton qiuyu=new JButton("%");private JButton deng=new JButton("=");private JButton fu=new JButton("+/-");private JButton dian=new JButton(".");private JButton kaigen=new JButton("sqrt");private JButton daoshu=new JButton("1/x");private TextField k1=new TextField();//private ObjConversion convert = new ObjConversion();JMenuItem copy,paste,t,help,about,me;JButton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9; Container cp;JTextField text;String copycontent="";boolean clickable=true,clear=true;int all=0;double qian;String fuhao;int jin=10,first=1;public JiSuanQi(){setTitle("计算器制作by王路 1002020123");setSize(400,300);setLocation(250,200);text=new JTextField(25);// text.setEnabled(false);text.setText("0.");text.setHorizontalAlignment(JTextField.RIGHT);//从右到左//setHorizontalAlignment方法的作用是让标签中的文字内容在标签内按照指定的方式对齐JPanel cp1=new JPanel();JPanel cp2=new JPanel();JPanel cp3=new JPanel();cp=getContentPane();cp.add(cp1,"North");cp.add(cp2,"Center");cp.add(cp3,"South");cp1.setLayout(new GridLayout(1,6));cp2.setLayout(new GridLayout(1,4));cp3.setLayout(new GridLayout(6,4));JTextField t3=new JTextField(25);cp1.add(text);// text.setEnabled(false);text.setEditable(false);text.setBackground(new Color(255, 255, 255));backspace=new JButton("Backspace");backspace.setForeground(new Color(255,0,0));backspace.addActionListener(this);ce=new JButton("CE");ce.setForeground(new Color(255,0,0));ce.addActionListener(this);c=new JButton("C");c.setForeground(new Color(255,0,0));c.addActionListener(this);k1.setVisible(false);cp2.add(k1);cp2.add(backspace);cp2.add(ce);cp2.add(c);num0=new JButton("0");num1=new JButton("1");num2=new JButton("2");num3=new JButton("3");num4=new JButton("4");num5=new JButton("5");num6=new JButton("6");num7=new JButton("7");num8=new JButton("8");num9=new JButton("9");cp3.add(num7);num7.addActionListener(this);cp3.add(num8);num8.addActionListener(this);cp3.add(num9);num9.addActionListener(this);cp3.add(chu);chu.setForeground(new Color(255,0,0)); chu.addActionListener(this);cp3.add(num4);num4.addActionListener(this);cp3.add(num5);num5.addActionListener(this);cp3.add(num6);num6.addActionListener(this);cp3.add(cheng);cheng.setForeground(new Color(255,0,0)); cheng.addActionListener(this);cp3.add(num1);num1.addActionListener(this);cp3.add(num2);cp3.add(num3);num3.addActionListener(this);cp3.add(jian);jian.setForeground(new Color(255,0,0));jian.addActionListener(this);cp3.add(dian);dian.addActionListener(this);cp3.add(num0);num0.addActionListener(this);cp3.add(fu);fu.addActionListener(this);cp3.add(jia);jia.setForeground(new Color(255,0,0));jia.addActionListener(this);cp3.add(daoshu);daoshu.addActionListener(this);cp3.add(qiuyu);qiuyu.addActionListener(this);cp3.add(kaigen);kaigen.addActionListener(this);cp3.add(deng);deng.setForeground(new Color(255,0,0));deng.addActionListener(this);JMenuBar mainMenu = new JMenuBar();setJMenuBar(mainMenu);JMenu editMenu = new JMenu("编辑");JMenu viewMenu = new JMenu("查看");JMenu helpMenu = new JMenu("帮助");mainMenu.add(editMenu);mainMenu.add(viewMenu);mainMenu.add(helpMenu);copy = new JMenuItem(" 复制");paste = new JMenuItem(" 粘贴");KeyStroke copyks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);copy.setAccelerator(copyks);//设置退出菜单选项加上快捷键KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); paste.setAccelerator(pasteks);//设置退出菜单选项加上快捷键editMenu.add(copy);editMenu.add(paste);copy.addActionListener(this);t = new JMenuItem("标准型");viewMenu.add(t);t.addActionListener(this);help = new JMenuItem(" 使用帮助主题");about = new JMenuItem(" 关于计算器");me = new JMenuItem(" 作者信息");helpMenu.add(help);helpMenu.add(about);helpMenu.add(me);help.addActionListener(this);about.addActionListener(this);me.addActionListener(this);addWindowListener(new WindowDestroyer());//结束窗口}public void actionPerformed(ActionEvent e){//响应动作代码if(first==1)text.setText("");first=0;//第一次把文本框0.清空Object temp = e.getSource();if(temp==copy){copycontent = text.getText(); }if(temp==paste){text.setText(text.getText()+copycontent);}if(temp==help){ //打开系统帮助文件要查资料try{String filePath = "C:/WINDOWS/Help/calc.chm";Runtime.getRuntime().exec("cmd.exe /c "+filePath);}catch(Exception eeee){System.out.println("打开系统的计算器出错");}}if(temp==about){JOptionPane.showMessageDialog(frame," Java计算器王路制作 ","关于计算器",RMATION_MESSAGE); } if(temp==me){JOptionPane.showMessageDialog(frame,"王路 1002020123"); }if(temp==backspace){//退格String s = text.getText();text.setText("");for (int i = 0; i < s.length() - 1; i++){ char a = s.charAt(i);text.setText(text.getText() + a);} }if (temp==ce){ text.setText("0.");clear=true;first=1;}if (temp==c){ text.setText("0.");clear=true;first=1;}if(temp==num0){ if(clear==false)//判断是否点击了符号位text.setText("");text.setText(text.getText()+"0");}if(temp==num1){ if(clear==false)text.setText("");text.setText(text.getText()+"1");clear=true;//第二次不在清空(前二句)}if(temp==num2){ if(clear==false)text.setText("");text.setText(text.getText()+"2");clear=true;}if(temp==num3){ if(clear==false)text.setText("");text.setText(text.getText()+"3");clear=true;}if(temp==num4){ if(clear==false)text.setText("");text.setText(text.getText()+"4");clear=true;}if(temp==num5){if(clear==false)text.setText("");text.setText(text.getText()+"5");clear=true;}if(temp==num6){if(clear==false)text.setText("");text.setText(text.getText()+"6");clear=true;}if(temp==num7){if(clear==false)text.setText("");text.setText(text.getText()+"7");clear=true;}if(temp==num8){if(clear==false)text.setText("");text.setText(text.getText()+"8");clear=true;}if(temp==num9){if(clear==false)text.setText("");text.setText(text.getText()+"9");clear=true;}if(temp==dian){clickable=true;for (int i = 0; i < text.getText().length(); i++) if ('.' == text.getText().charAt(i)){clickable=false;break;} //第一层判断是否里面含有小数点;if(clickable==true)//第二坛判断text.setText(text.getText()+".");}try{if(temp==jia){//加法qian=Double.parseDouble(text.getText());fuhao="+";clear=false;}if(temp==jian){qian=Double.parseDouble(text.getText());fuhao="-";clear=false;}if(temp==cheng){qian=Double.parseDouble(text.getText());fuhao="*";clear=false;}if(temp==chu){qian=Double.parseDouble(text.getText());fuhao="/";clear=false;}if(temp==deng){double ss=Double.parseDouble(text.getText()); text.setText("");if(fuhao=="+")text.setText(qian+ss+"");if(fuhao=="-")text.setText(qian-ss+"");if(fuhao=="*")text.setText(qian*ss+"");if(fuhao=="/")text.setText(qian/ss+"");clear=false;//要清空前一次的数据}if(temp==kaigen){String s = text.getText();if (s.charAt(0) == '-'){text.setText("负数不能开根号");}elsetext.setText(Double.toString(ng.Math.sqrt(Double.parseDouble(text.getTex t()))));clear=false;}if(temp==daoshu){if (text.getText().charAt(0) == '0'&&text.getText().length() == 1){text.setText("除数不能为零");}else{boolean isDec = true;int i, j, k;String s = Double.toString(1 / Double.parseDouble(text.getText()));for (i = 0; i < s.length(); i++)if (s.charAt(i) == '.')break;for (j = i + 1; j < s.length(); j++)if (s.charAt(j) != '0'){isDec = false;break;}if (isDec == true){String stemp = "";for (k = 0; k < i; k++)stemp += s.charAt(k);text.setText(stemp);}elsetext.setText(s);}clear=false;}if(temp==qiuyu){text.setText("0");clear=false;}if (temp == fu){boolean isNumber = true;String s = text.getText();for (int i = 0; i < s.length(); i++)if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-')){isNumber = false;break;}if (isNumber == true){//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-'){text.setText("");for (int i = 1; i < s.length(); i++){char a = s.charAt(i);text.setText(text.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsetext.setText('-' + s);}}}catch(Exception eee){System.out.println("运算时,首先输入数字或字符");text.setText("运算出错");clear=false;}}class WindowDestroyer extends WindowAdapter{//退出窗口动作public void windowClosing(WindowEvent e){System.exit(0);}}public static void main(String arg[])//产生窗口{JiSuanQi win = new JiSuanQi();win.setVisible(true);}}运行截图:四、小结通过此次的课程设计实践,我们不但进一步理解掌握了课上老师教授的知识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义,发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了GUI方面的知识。
课程设计课程设计目的设计一个基于Swing的计算器应用程序,完成普通的算术运算。
课程设计要求1.设计的计算器是基于Swing的,可以完成加减乘除和取余运算。
2.增加计算器的日期计算功能,能够计算两个日期之间相距的天数。
(要判断键入的日期格式是否正确,并能正确处理按钮动作事件,同时能够得到正确的计算结果)设计要点主要练习使用布局管理器设计一个计算器的界面,并使用事件监听器处理数据的输入,完成相关的计算。
在面板上可以增加一个算术/日期的转换按钮来选择是普通计算还是日期计算。
以及增加一个清零的按钮CE,用以将显示结果的单行文本域清空,同时将各个参数设置为默认值。
二、总体方案设计日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet 中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。
本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能。
本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域还可以将进制转换的面板与单行文本框放一块包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器。
布局设计好后再添加按钮事件。
对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
四、程序的调试与运行结果说明程序功能实现:使用swing组件和awt图形用户界面以及BroadLayout布局管理器。
通过在按钮的单击事件处理方法中调用类的成员方法calculator()来进行简易计算器的各种运算,并正确实现运算功能。
java简易计算器设计思路Java简易计算器设计思路一、引言计算器是我们日常生活中常用的工具之一,可以帮助我们进行各种简单的数学计算。
本文将介绍如何使用Java编程语言设计一个简易的计算器。
二、功能需求我们的计算器需要具备以下基本功能:1. 实现加、减、乘、除四则运算;2. 能够处理小数、整数和负数的运算;3. 具备清除操作,清零当前计算结果;4. 能够处理连续计算,即进行多次连续的运算。
三、设计思路在设计简易计算器时,我们可以考虑以下步骤:1. 用户界面设计首先,我们需要设计一个用户界面,让用户能够输入数字和选择运算符号。
可以使用Java的Swing或JavaFX进行界面设计。
2. 输入数字和运算符在用户界面中,我们可以使用文本框和按钮来实现数字的输入和运算符的选择。
用户在文本框中输入数字,然后点击相应的按钮选择运算符号。
3. 运算处理根据用户的选择,我们可以利用Java中的if或switch语句来进行相应的运算处理。
比如用户选择加法运算,则获取用户输入的两个数字并相加。
同样,对于减法、乘法和除法运算,我们也可以使用相应的语句进行处理。
4. 显示结果最后,我们需要将计算结果显示在用户界面的文本框中。
将处理后的结果显示在界面上,让用户直观地看到计算结果。
5. 清除操作我们还可以添加一个清除按钮,使用户能够清除当前的计算结果,重新进行新的计算。
四、扩展功能除了基本的计算功能外,我们还可以考虑增加以下扩展功能:1. 添加括号功能,使计算器能够处理复杂的表达式;2. 添加开平方、取余、求幂等高级运算;3. 添加历史记录功能,保存用户之前的计算结果;4. 添加单位转换功能,使计算器能够进行长度、重量、温度等单位之间的转换。
五、总结通过以上设计思路,我们可以实现一个简易的计算器,满足用户的基本计算需求。
同时,我们可以根据实际需求添加扩展功能,提升计算器的实用性和灵活性。
希望本文对您设计和实现一个Java简易计算器有所帮助。
目录一、课设任务及要求 (1)二、需求分析 (2)三、设计思路 (3)四、详细设计 (4)五、运行调试与分析讨论 (14)六、设计体会与小结 (18)七、参考文献 (19)一、课设任务及要求1)课设任务:⑴、设计的计算器应用程序可以完成加法、减法、乘法、除法以及取余运算(可以进行浮点数和负数的运算);⑵、有求倒数、退格和清零功能。
2)创新要求:能进行正切、余弦,以及求平方根、指数(包括对e)、自然对数运算。
3)设计要求①设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。
且有小数点、正负号、求倒数、退格和清零功能。
②课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。
③认真按时完成课程设计报告,课程设计报告内容包括:设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结六个部分。
二、需求分析⑴、开发的技术及功能本课程设计是要做一个图形界面的计算器,其界面主要是由swing组件中的控件构成。
程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负数运算)和sin、cos、tan等三角函数求值运算,同时能进行指数运算和自然对数运算,还有求倒数、退格和清零功能。
⑵设计思路设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。
但本计算器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如余弦(cos)、正切(tan)、指数运算(pow)、自然对数运算(log)、求平方根(sqrt)以及对e的指数运算(exp),并且还能进行连续运算。
总体上说来,本计算器设计简单,代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。
java课程设计设计一个图形界面的计算器,完成简单的算术运算2.课设要求要求使用Java语言编写程序,实现基本的加、减、乘、除四种运算,并且要求在图形界面中显示运算过程和结果。
此外,还要求程序具有良好的用户交互性,能够处理用户的输入错误,并给出友好的提示信息。
二、需求分析通过对计算器的功能和用户需求进行分析,我们确定了以下需求:1.支持基本的加、减、乘、除四种运算;2.支持小数和负数的运算;3.支持多次连续运算;4.支持括号运算;5.支持清空、删除和撤销功能;6.支持错误输入的提示和纠正。
三、设计思路我们采用MVC架构设计模式,将程序分为三个模块:模型、视图和控制器。
1.模型:负责进行数学运算,计算结果并返回给控制器;2.视图:负责显示运算过程和结果,以及处理用户的输入;3.控制器:负责将用户输入传递给模型进行计算,并将计算结果传递给视图进行显示。
四、详细设计1.界面设计我们采用Java Swing框架设计图形界面,主要包括以下组件:1)文本框:用于显示运算过程和结果;2)按钮:用于输入数字、运算符和其他功能键;3)菜单栏:用于提供设置和帮助等功能。
2.模型设计我们设计了一个Calculator类,包括以下方法:1)n:加法运算;2)n:减法运算;3)n:乘法运算;4)n:除法运算;5)calculate:根据用户输入的表达式进行计算。
3.控制器设计我们设计了一个Controller类,负责将用户输入传递给模型进行计算,并将计算结果传递给视图进行显示。
Controller 类包括以下方法:1)handleInput:处理用户输入;2)updateView:更新视图。
五、运行调试与分析讨论在开发过程中,我们遇到了一些问题,如括号匹配、小数运算精度等,通过调试和讨论,最终解决了这些问题。
在测试过程中,我们发现程序运行稳定,界面友好,能够满足用户的需求。
六、设计体会与小结通过这次课程设计,我们深入了解了Java语言和GUI编程,掌握了MVC架构设计模式的应用,提高了团队合作和问题解决能力。
面向对象课程设计(Java)题目:简易计算器专业:电子商务班级:1110025学生姓名:指导老师:2013 年 1月 6日目录一、设计内容 (1)二、设计要求 (1)三、总体设计 (1)四、具体设计 (1)五、程序设计 (6)设计体会与小结 (15)简易计算器设计一、设计内容设计一个图形界面(GUI)的应用程序,完成简单的运算。
通过计算器的编辑来检测和提升自己的java能力,并最终完成课程设计报告。
二、设计要求1、应用自己所学课程知识完成对计算器的基本任务。
2、查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。
3、通过应用java程序编写计算器来提升对简单的图形界面的了解和掌握。
三、总体设计该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能。
四、具体设计1、程序流程图:2、主要代码展示及说明:总体代码的设计:程序主窗体继承JFrame类,使用24个JBotton按钮实现数字和基本功能,并且分别注册监听,采用6行4列网格布局,完成计算器界面的基本设置,最后对按钮进行计算分析,计算并显示结果。
这段代码主要是对程序的主框架进行相应的设置super("简易计算器");setSize(300,260);this.setLayout(new BorderLayout());jPanel1=new JPanel();jPanel1.setLayout(new GridLayout(1,1)); //一行一列的布局jPanel2=new JPanel();jPanel2.setLayout(new GridLayout(6,4)); //六行四列的布局resultField=new JTextField("0");jPanel1.add(resultField);this.add(jPanel1,BorderLayout.NORTH);this.add(jPanel2,BorderLayout.CENTER);设置数字按钮1到9并添加监控以及符号等的添加监控s1=new JButton(" 1 "); s1.addActionListener(this);s2=new JButton(" 2 "); s2.addActionListener(this);s3=new JButton(" 3 "); s3.addActionListener(this);s4=new JButton(" 4 "); s4.addActionListener(this);s5=new JButton(" 5 "); s5.addActionListener(this); s6=new JButton(" 6 "); s6.addActionListener(this); s7=new JButton(" 7 "); s7.addActionListener(this); s8=new JButton(" 8 "); s8.addActionListener(this); s9=new JButton(" 9 "); s9.addActionListener(this); s0=new JButton(" 0 "); s0.addActionListener(this); b1=new JButton(" + "); b1.addActionListener(this); b2=new JButton(" - "); b2.addActionListener(this); b3=new JButton(" * "); b3.addActionListener(this); b4=new JButton(" / "); b4.addActionListener(this);b5=new JButton(" ^ "); b5.addActionListener(this); b6=new JButton(" 开方 "); b6.addActionListener(this); b7=new JButton(" % "); b7.addActionListener(this);b8=new JButton(" x! "); b8.addActionListener(this);b9=new JButton(" 1/x "); b9.addActionListener(this);f1=new JButton(" . "); f1.addActionListener(this); f2=new JButton(" = "); f2.addActionListener(this);f3=new JButton(" C "); f3.addActionListener(this);f4=new JButton(" 负 "); f4.addActionListener(this); f5=new JButton(" 退格 "); f5.addActionListener(this); jPanel2.add(f3);jPanel2.add(b4);jPanel2.add(b3);jPanel2.add(f5);jPanel2.add(s7);jPanel2.add(s8);jPanel2.add(s9);jPanel2.add(b1);jPanel2.add(s4);jPanel2.add(s5);jPanel2.add(s6);jPanel2.add(b2);jPanel2.add(s1);jPanel2.add(s2);jPanel2.add(s3);jPanel2.add(b5);jPanel2.add(s0);jPanel2.add(f1);jPanel2.add(f4);jPanel2.add(b6);jPanel2.add(b7);jPanel2.add(b8);jPanel2.add(b9);jPanel2.add(f2);(3)数据输入用方法num(int i)设计如下:public void num(int i){String s = null;s=String.valueOf(i); //返回整数i的字符串表示形式if(end){ //如果数字输入结束,则将文本框置零,重新输入resultField.setText("0");end=false;}if((resultField.getText()).equals("0")){//如果文本框的内容为零,则覆盖文本框的内容resultField.setText(s);}else{ //如果文本框的内容不为零,则在内容后面添加数字str = resultField.getText() + s;resultField.setText(str);}以及用JFrame的方法actionPerformed(ActionEvent e)来获取数据(4)符号运算及清零、退格的设计如下:if(add){ // 加法num1=num1 +num2;}else if(sub){ //减法num1=num1 - num2;}else if(mul){ //乘法num1=num1 * num2;}else if(div){ //除法if(num2==0) throw new ArithmeticException("除数不能为零");elsenum1=num1 / num2;}else if(chf){ //乘方if(num2==0) num1=1;elsenum1=Math.pow(num1, num2);}else if(evo){ //开方if(num2<0) throw new ArithmeticException("被开方数不能小于零");else num1=Math.sqrt(num2);}else if(rec){ //倒数if(num2<0) throw new ArithmeticException("分母不能小于零");else num1=1/num2;}else if(per){ //百分num1=num1/100.0;}else if(pur){ //阶乘if(num2<0) throw new ArithmeticException("负数不能求阶乘");else for(int i=1;i<num2;i++){num1=i*num1;}}resultField.setText(String.valueOf(num1));end=true;}else if(e.getSource()==f3){ //实现清零resultField.setText("0");}else if(e.getSource()==f4){ //实现负号if(resultField.getText()!="0"){resultField.setText("-"+resultField.getText());}}else if(e.getSource()==f5){ //实现退格int i;i=(resultField.getText()).length();if(i==1){resultField.setText("0");}else { str=resultField.getText();resultField.setText(str.substring(0,i-1));}}}五、程序设计import java.awt.*;import java.awt.event.*;import javax.swing.*;public class test1 extends JFrame implements ActionListener{ // JFrame jframe1;JPanel jPanel1,jPanel2;JTextField resultField;JButtons1,s2,s3,s4,s5,s6,s7,s8,s9,s0,b1,b2,b3,b4,b5,b6,b7,b8,b9,f1,f 2,f3,f4,f5; private boolean end,add,sub,mul,div,evo,chf,per,rec,pur;private String str;private double num1,num2;public test1(){super("简易计算器");setSize(300,260);this.setLayout(new BorderLayout());jPanel1=new JPanel();jPanel1.setLayout(new GridLayout(1,1)); //一行一列的布局jPanel2=new JPanel();jPanel2.setLayout(new GridLayout(6,4)); //四行五列的布局resultField=new JTextField("0");jPanel1.add(resultField);this.add(jPanel1,BorderLayout.NORTH);s1=new JButton(" 1 "); s1.addActionListener(this);s2=new JButton(" 2 "); s2.addActionListener(this); s3=new JButton(" 3 "); s3.addActionListener(this); s4=new JButton(" 4 "); s4.addActionListener(this); s5=new JButton(" 5 "); s5.addActionListener(this); s6=new JButton(" 6 "); s6.addActionListener(this); s7=new JButton(" 7 "); s7.addActionListener(this); s8=new JButton(" 8 "); s8.addActionListener(this); s9=new JButton(" 9 "); s9.addActionListener(this); s0=new JButton(" 0 "); s0.addActionListener(this); b1=new JButton(" + "); b1.addActionListener(this); b2=new JButton(" - "); b2.addActionListener(this); b3=new JButton(" * "); b3.addActionListener(this); b4=new JButton(" / "); b4.addActionListener(this);b5=new JButton(" ^ "); b5.addActionListener(this); b6=new JButton(" 开方 "); b6.addActionListener(this); b7=new JButton(" % "); b7.addActionListener(this);b8=new JButton(" x! "); b8.addActionListener(this);b9=new JButton(" 1/x "); b9.addActionListener(this);f1=new JButton(" . "); f1.addActionListener(this); f2=new JButton(" = "); f2.addActionListener(this);f3=new JButton(" C "); f3.addActionListener(this);f4=new JButton(" 负 "); f4.addActionListener(this); f5=new JButton(" 退格 "); f5.addActionListener(this); jPanel2.add(f3);jPanel2.add(b4);jPanel2.add(b3);jPanel2.add(f5);jPanel2.add(s7);jPanel2.add(s8);jPanel2.add(s9);jPanel2.add(b1);jPanel2.add(s4);jPanel2.add(s5);jPanel2.add(s6);jPanel2.add(b2);jPanel2.add(s1);jPanel2.add(s2);jPanel2.add(s3);jPanel2.add(b5);jPanel2.add(s0);jPanel2.add(f1);jPanel2.add(f4);jPanel2.add(b6);jPanel2.add(b7);jPanel2.add(b8);jPanel2.add(b9);jPanel2.add(f2);this.add(jPanel2,BorderLayout.CENTER);}public void num(int i){String s = null;s=String.valueOf(i); //返回整数i的字符串表示形式if(end){ //如果数字输入结束,则将文本框置零,重新输入resultField.setText("0");end=false;}if((resultField.getText()).equals("0")){//如果文本框的内容为零,则覆盖文本框的内容resultField.setText(s);}else{ //如果文本框的内容不为零,则在内容后面添加数字str = resultField.getText() + s;resultField.setText(str);}}public void actionPerformed(ActionEvent e)throws ArithmeticException {//数字事件if(e.getSource()==s1)num(1);else if(e.getSource()==s2)num(2);else if(e.getSource()==s3)num(3);else if(e.getSource()==s4)num(4);else if(e.getSource()==s5)num(5);else if(e.getSource()==s6)num(6);else if(e.getSource()==s7)num(7);else if(e.getSource()==s8)num(8);else if(e.getSource()==s9)num(9);else if(e.getSource()==s0)num(0);//符号事件else if(e.getSource()==b1)sign(1);else if(e.getSource()==b2)sign(2);else if(e.getSource()==b3)sign(3);else if(e.getSource()==b4)sign(4);else if(e.getSource()==b5)sign(5);else if(e.getSource()==b6)sign(6);else if(e.getSource()==b7)sign(7);else if(e.getSource()==b8)sign(8);else if(e.getSource()==b9)sign(9);else if(e.getSource()==f1){ //实现"."str=resultField.getText();if(str.indexOf(".")<=1){str+=".";resultField.setText(str);}}else if(e.getSource()==f2){ //实现"=" num2=Double.parseDouble(resultField.getText());if(add){ // 加法num1=num1 +num2;}else if(sub){ //减法num1=num1 - num2;}else if(mul){ //乘法num1=num1 * num2;}else if(div){ //除法if (num2==0) throw new ArithmeticException("除数不能为零");elsenum1=num1 / num2;}else if(chf){ //乘方if(num2==0) num1=1;elsenum1=Math.pow(num1, num2);}else if(evo){ //开方if(num2<0) throw new ArithmeticException("被开方数不能小于零");else num1=Math.sqrt(num2);}else if(rec){ //倒数if(num2<0) throw new ArithmeticException("分母不能小于零");else num1=1/num2;}else if(per){ //百分num1=num1/100.0;}else if(pur){ //阶乘if(num2<0) throw new ArithmeticException("负数不能求阶乘");else for(int i=1;i<num2;i++){num1=i*num1;}}resultField.setText(String.valueOf(num1));end=true;}else if(e.getSource()==f3){ //实现清零resultField.setText("0");}else if(e.getSource()==f4){ //实现负号if(resultField.getText()!="0"){resultField.setText("-"+resultField.getText());}}else if(e.getSource()==f5){ //实现退格int i;i=(resultField.getText()).length();if(i==1){resultField.setText("0");}else { str=resultField.getText();resultField.setText(str.substring(0,i-1));}}}public void sign(int s){if(s==1){add=true;sub=false;mul=false;div=false;evo=false;chf=false;per=false;pur=false;rec=false;}else if(s==2){add=false;sub=true;mul=false;evo=false;chf=false;per=false;pur=false;rec=false;}else if(s==3){add=false;sub=false;mul=true;div=false;evo=false;chf=false;per=false;pur=false;rec=false;}else if(s==4){add=false;sub=false;mul=false;div=true;evo=false;chf=false;per=false;pur=false;rec=false;}else if(s==5){add=false;sub=false;mul=false;div=false;evo=false;chf=true;per=false;pur=false;}else if(s==6){ add=false;sub=false;mul=false;div=false;evo=true;chf=false;per=false;pur=false;rec=false;}else if(s==7){ add=false;sub=false;mul=false;div=false;evo=false;chf=false;per=true;pur=false;rec=false;}else if(s==8){ add=false;sub=false;mul=false;div=false;evo=false;chf=false;per=false;pur=true;rec=false;}else if(s==9){ add=false;sub=false;mul=false;evo=false;chf=false;per=false;pur=false;rec=true;}num1=Double.parseDouble(resultField.getText());end=true;}}public class mainclass {public static void main(String[] args){try{test1 th1=new test1();th1.show();}catch (Exception e){System.out.println(e);}}}设计体会与小结经过一周的实习,本学期的java课程设计到此也算告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java基本知识及软件开发的了解。
java简易计算器的设计思路随着计算机技术的不断发展,计算器也已经成为了我们生活中不可或缺的工具之一。
而Java语言作为一种面向对象的编程语言,也可以实现一个简易计算器。
下面,本文将介绍Java简易计算器的设计思路。
首先,我们需要设计一个计算器的图形用户界面(GUI)。
在Java 中,可以使用Swing来构建图形界面。
我们可以添加一个JPanel面板,然后向其中添加一些按钮来实现计算器的数字输入和运算。
例如,我们可以添加一个JButton,标签为“1”,当用户单击该按钮时,将数字1添加到计算器的文本框中。
其次,我们需要一个变量来存储计算器的运算结果。
在用户单击了计算器中的“=”按钮后,我们需要将这个变量中保存的结果显示在计算器的文本框中。
然后,我们需要实现计算器的算法。
不同的运算符号需要不同的算法实现。
例如,加法运算可以通过将两个数相加实现,而乘法运算可以通过将两个数相乘实现。
我们可以通过一个switch语句来判断用户选择的运算符号,然后调用相应的算法实现。
最后,我们需要添加一些边界检查和异常处理。
例如,当用户输入非法字符时,我们需要提示用户输入有误,或者当除数为零时,我们需要提示用户无法进行该运算。
综上所述,Java简易计算器的设计思路包括以下几个步骤:设计图形界面、实现运算结果变量的保存和显示、实现算法、添加边界检查和异常处理。
通过这些步骤的实现,我们可以打造出一个功能简单但实用的Java计算器。
java简易计算器设计思路
一、引言(200字)
计算器是一种用于进行数学运算的工具,我们经常使用计算器进行简单的加减乘除等运算。
而在计算机编程中,我们也可以设计一个简易计算器的程序,用于实现基本的数学运算功能。
本文将围绕设计一个简易计算器展开,主要包括用户输入的处理、运算符的识别、表达式的计算以及结果的输出等内容。
二、用户输入的处理(200字)
计算器首先需要能够接收用户输入的表达式,包括数字和运算符。
在Java中可以使用Scanner类来获取用户的输入。
首先,我们需要创建一个Scanner对象,然后使用nextLine(方法获取用户输入的一行字符串。
接下来,我们需要对输入的字符串进行处理,将数字和运算符分开。
可以使用String的split(方法将字符串按照特定的分隔符进行分割。
根据运算符的特性,常见的分隔符可以是空格、加号、减号、乘号、除号等。
将得到的数字和运算符分别存储在一个列表中,以便后续的处理。
三、运算符的识别(200字)
在处理用户输入后,我们需要对运算符进行识别和分类,以便进行相应的数学运算。
Java中可以使用if语句或者switch语句来对运算符进行判断。
针对常见的运算符如加号、减号、乘号、除号等,可以使用简单的逻辑判断语句进行处理。
对于更为复杂的运算符,比如平方根、阶乘、求幂等,可以使用if-else的嵌套语句进行处理。
根据识别结果,我们可以调用相应的数学函数进行运算。
四、表达式的计算(200字)
识别运算符后,我们需要对表达式进行计算。
计算器的基本原理是根
据输入的数字和运算符进行相应的数学运算,并返回结果。
在Java中,
可以使用各种数学运算符,比如加号、减号、乘号、除号、取模等进行计算。
不同的运算符有不同的运算规则,需要根据具体需求进行操作。
在计
算过程中,我们需要注意异常情况的处理,比如除零错误、非法运算符等。
Java提供了异常处理机制,可以使用try-catch语句来捕获异常并进行
处理。
五、结果的输出(200字)
经过运算后,我们需要将结果输出给用户。
Java中可以使用
System.out.println(方法将结果打印在控制台上,以方便用户查看。
在
输出结果时,需要对结果进行格式化处理,保留特定的小数位数或者科学
计数法等。
如果计算过程中出现了异常,也需要将异常信息输出给用户,
以便用户了解出错的原因。
除了输出到控制台,我们还可以将结果保存到
文件中或者发送到其他设备上,以便进行进一步的处理或者共享。
六、总结(100字)
本文介绍了设计一个简易计算器的思路,包括用户输入的处理、运算
符的识别、表达式的计算以及结果的输出。
通过对用户输入的数学表达式
进行处理和运算,可以实现一个基本的计算器功能。
在实际应用中,还可
以根据需求进行扩展和优化,添加更多的运算符和功能,提升计算器的实
用性和易用性。
计算器的设计不仅可以帮助用户进行简单的数学运算,还
可以作为学习编程的入门项目,帮助初学者熟悉编程语言和算法思维。