在写代码的过程中,我意识到对于学习编程语言来说,比之看书,动手实践是更重要的。

通过写这个计算器程序,我掌握了一个java程序的基本构架,学会了用构造器进行初始化,使用监听器,设计界面等等知识。

这个计算器实现了如下功能:

1.可以通过键盘或按钮输入数据;

2.实现加减乘除四则运算;

3.连续运算;

4.除数为0时进行纠错。

不足之处在于:

1.功能太过简单;

2.没有异常处理机制(我还未对这一部分的内容进行学习)。

现将源代码粘贴如下:

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Caculator extends JFrame implements KeyListener{ //构造Caculator类 private Container content;//构造容器 private JButton bCancel; //清除按钮 private JButton[] b=new JButton[16]; //构造按钮数组 private char LastOp; //操作符号 private boolean Countable; //用于判断是否可计算 private String KeyLabel[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; private StringBuffer str; private JPanel KeyPanel,TextPanel; //按键面板,结果面板 private JTextArea tResult; //用于显示结果的文本域 private double x=0,y=0; //操作数 public Caculator(){ setTitle("袖珍计算器"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); content =getContentPane(); //初始化一个容器 content.setLayout(new BorderLayout()); //设置容器的布局方式 KeyPanel=new JPanel(); TextPanel=new JPanel(); TextPanel.setLayout(new FlowLayout()); //设置TextPanel面板的布局方式 KeyPanel.setLayout(new GridLayout(4,4)); //设置KeyPanel面板的布局方式 tResult=new JTextArea(1,15); //实例化一个JTextArea类 tResult.setEditable(false); //将tResult设置为不可编辑 tResult.setText("0"); //文本域显示为0 tResult.addKeyListener(this); //添加键盘监听器 str=new StringBuffer(); //实例化一个字符串缓冲区 ButtonListener btnListener = new ButtonListener(); //实例化一个ButtonListener类的监听器 for(int i=0;i<16;i++){ b[i] = new JButton(KeyLabel[i]); b[i].addActionListener(btnListener); //添加ButtonListener类监听器 b[i].addKeyListener(this); //添加键盘监听器 KeyPanel.add(b[i]); } bCancel=new JButton("C"); bCancel.addActionListener(btnListener); //添加ButtonListener类监听器 bCancel.addKeyListener(this); //添加键盘监听器 bCancel.setBackground(Color.RED); LastOp='!'; //若LastOp的值不为'+' '-' '*' '/'中的一个,则约定它的值是 '!' Countable=false; TextPanel.add(tResult); TextPanel.add(bCancel); content.add("North",TextPanel); content.add("Center",KeyPanel); pack(); setResizable(false); setVisible(true); } class ButtonListener implements ActionListener //构造监听器 { public void actionPerformed(ActionEvent e) { String s = ((JButton)e.getSource()).getText().trim(); //得到用户按下的按钮上的文本 char c = s.charAt(0); //得到s中索引为0的字符 if(c == 'C') //选择按钮C { tResult.setText("0"); str.setLength(0); LastOp = '!'; Countable = false; x = 0; y = 0; return; } if(c == '.') //选择输入小数点 { if( tResult.getText().trim().indexOf(".") != -1) return; else { str.insert(str.length(),"."); tResult.append("."); return; } } if(c == '+'||c == '-'||c == '*'||c == '/'||c == '=') //按加减乘除或等号键 { Caculate(c); return; } //剩下的数字键 tResult.setText(str.append(s).toString()); Countable=true; } } //实现KeyListener监听器 public void keyTyped(KeyEvent ek) { char c = ek.getKeyChar(); //获取键盘上按的数字键 if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9'||c=='0') { tResult.setText(str.append(c).toString()); Countable=true; return; } if(c =='.') //按小数点 { if( tResult.getText().trim().indexOf(".") != -1) return; else { str.insert(str.length(),"."); tResult.append("."); return; } } if((int)c == KeyEvent.VK_DELETE ) //按delete键 { tResult.setText("0"); str.setLength(0); LastOp = '!'; Countable = false; x = 0; y = 0; return; } if(c == '+'||c == '-'||c == '*'||c == '/'||c == '=') //按加减乘除或等号键 { Caculate(c); return; } } public void keyPressed(KeyEvent ek) {} public void keyReleased(KeyEvent ek) {} public void Caculate(char c) { if(c == '+') //按加号键 { Add(); return; } if( c == '-') //按减号键 { Minus(); return; } if(c == '*') //按乘号键 { Mul(); return; } if(c == '/') //按除号键 { Div(); return; } if(c == '=') //按等号键 { Equal(); return; } } public void Add(){ //加方法 if(Countable==true && LastOp != '!') //判断是否进行运算 { y = Double.parseDouble(tResult.getText().trim()); switch(LastOp) { case '+' : x = x+y; break; case '-' : x = x-y; break; case '*' : x = x*y; break; case '/' :if(y != 0) x = x/y; else { tResult.setText("除数不能为0");return; } } tResult.setText(""+x); Countable = false; } else x = Double.parseDouble(tResult.getText().trim()); str.setLength(0); y = 0; LastOp = '+'; return ; } public void Minus(){ //减方法 if(Countable==true && LastOp != '!') //判断是否进行运算 { y = Double.parseDouble(tResult.getText().trim()); switch(LastOp) { case '+' : x = x+y; break; case '-' : x = x-y; break; case '*' : x = x*y; break; case '/' :if(y != 0) x = x/y; else { tResult.setText("除数不能为0");return; } } tResult.setText(""+x); Countable = false; } else x = Double.parseDouble(tResult.getText().trim()); str.setLength(0); y = 0; LastOp = '-'; return ; } public void Mul(){ //乘方法 if(Countable==true && LastOp != '!') //判断是否进行运算 { y = Double.parseDouble(tResult.getText().trim()); switch(LastOp) { case '+' : x = x+y; break; case '-' : x = x-y; break; case '*' : x = x*y; break; case '/' :if(y != 0) x = x/y; else { tResult.setText("除数不能为0");return; } } tResult.setText(""+x); Countable = false; } else x = Double.parseDouble(tResult.getText().trim()); str.setLength(0); y = 0; LastOp = '*'; return ; } public void Div() //除方法 { if(Countable==true && LastOp != '!') //判断是否进行运算 { y = Double.parseDouble(tResult.getText().trim()); switch(LastOp) { case '+' : x = x+y; break; case '-' : x = x-y; break; case '*' : x = x*y; break; case '/' :if(y != 0) x = x/y; else { tResult.setText("除数不能为0");return; } } tResult.setText(""+x); Countable = false; } else x = Double.parseDouble(tResult.getText().trim()); str.setLength(0); y = 0; LastOp = '/'; return ; } public void Equal() //求结果的方法 { y = Double.parseDouble(tResult.getText().trim()); switch(LastOp) { case '+' : x = x+y; break; case '-' : x = x-y; break; case '*' : x = x*y; break; case '/' :if(y != 0) x = x/y; else { tResult.setText("除数不能为0");return; } } tResult.setText(""+x); Countable=false; return; } public static void main(String args[]) { Caculator cal=new Caculator(); } }

心得:

1.Java从每个类的角度(而不是程序执行的流程)去思考问题,构建程序框架。用Java语言写程序其实有规律可循的,比如Swing组件中都有固定的类,每个类都有固定的方法(举个例子,一般说来每个JButton类都要加上一个监听器,监听器中又一定要有actionPerformed方法)。我们要做的就是把这些类和方法具体化。

2.Java语言中的方法调用十分便捷,毕竟是高级语言,程序员不用太操心底层的实现。所以写程序的效率还是挺高的。

3.在阅读别人写的代码的过程中,我发现Java语言写的程序很容易读懂,变量和方法的名字基本上都能见名知意。不过名字都挺长的,自己敲代码时就有点麻烦了。

java编写计算器实现cancel_用Java编写的简易计算器相关推荐

  1. Java GUI图形编程 使用awt和swing 制作简易计算器的工具包含源码和讲解 / java练习项目

    系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录 前言 一.常规配置 1. 设置窗口大小 2. 获取当前屏幕的尺寸 3. 窗口居中 4. 设置窗口名称 5. 添加监听器,关闭窗口 ...

  2. js 月份间隔计算器_15分钟用JS做一个简易计算器

    原标题:15分钟用JS做一个简易计算器 前言 这个小练手旨在帮助刚上手学习Java的同学练习最基本的Js知识,大神勿喷哈,由于这个是非常简易的计算器,可以完成的功能有加减乘除和AC(清屏),DEL(退 ...

  3. linux shell 计算器 除0,用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1....

    用shell写一个简易计算器,可以实现加.减.乘.除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo &quo ...

  4. linux qt小型计算器课程设计,用Qt设计一个简易计算器

    Qt工作原理: 事件驱动,信号与槽原理. 要实现简易计算器的设计需要将界面按钮转到槽,具体程序如下: Widget.h : #ifndef WIDGET_H #define WIDGET_H #inc ...

  5. 单片机简单的计算器c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 case 0x7b: dengyu=1; //key=11; //wei++; break; } while(temp!=0xf0) { temp=P3; ...

  6. android 加减乘除计算器,【03-21求助】写一个简易计算器的安卓app,一按加减乘除就退出...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package com.example.ag; import android.app.Activity; import android.os.Bundle ...

  7. Java课设-百行代码实现简易计算器

    成绩: __________ Java程序设计 工程实践 --简易计算器的设计 院. 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一. 设计简介 2 ...

  8. 基于PyQt5的简易计算器

    基于PyQt5的简易计算器之四 提示:基于PyQt5的简易计算器之一为环境搭建 基于PyQt5的简易计算器之二为Qt Designer使用 基于PyQt5的简易计算器之三为按键的功能实现 基于PyQt ...

  9. java编写简易计算器_java实现简易计算器功能

    本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一 ...

最新文章

  1. flash 绘图API:绘制基础的图形
  2. Xcode+OpenCV3.4.0 折腾(2)
  3. 【PAT (Advanced Level) Practice】1113 Integer Set Partition (25 分)
  4. 用宏定义代替printf函数
  5. 专业的LaTeX: 在Linux下编写高质量的文档
  6. php ip访问mysql什么配置_PHP与MYSQL配合完成IP的存取
  7. air java,Java Bean
  8. python中的[-1]、[:-1]、[::-1]、[n::-1]
  9. Kafka源码解析 - 副本迁移任务提交流程
  10. XmlReader 使用
  11. 【TCP/IP】单播与组播
  12. [设计原则] 为模块设计初始化和终止化函数
  13. 店铺二维码:如何生成大众点评二维码
  14. vb.net VS2010编程
  15. 从零开始搭建我的网上商城 - Pika商城
  16. VHDL——分频器设计
  17. Javascript保存网页为图片
  18. MIMO天线市场深度研究分析报告
  19. 新元宇宙奇科幻小说原创作品每周连载地球人奇游天球记第六回冬奥登月
  20. 计算机怎么审单流程,电子审单

热门文章

  1. TortoiseGit拉取或推送,输入账号密码后提示 HTTP Basic: Access denied fatal: Authentication failed 解决方案
  2. 如何在Java项目中查找未使用/无效的代码
  3. 重装系统Win10电脑磁盘被写保护怎么办
  4. Win11如何添加过时硬件?Win11添加过时硬件的方法
  5. win11系统通知怎么取消 Windows11取消系统通知的步骤方法
  6. 编译安装PCL点云库,Kinect2驱动,乐视Astra相机驱动
  7. 堡垒机应用发布服务器是干嘛的_支持Web UI数据库审计和敏感数据国密算法加密,JumpServer堡垒机v2.5.0发布丨Release Notes...
  8. vscode jupyter补全_Cern ROOT 在jupyter里的使用
  9. 在Makefile中进行宏定义-D
  10. 关于Mysql服务自动关闭以及无法启动问题的解决办法