zoukankan      html  css  js  c++  java
  • java计算器

       由于自己的实验报告 需要用Java来写一个实验报告。自己本没有怎么学过Java,但是学的话也就认真的学一下,毕竟技术这条路线是技多不压身。于是在网站上找来了一些资料,关于Java到底是干什么的,以及Java应该如何学习。
        

    为什么选择Java

      1.Java作为一门面向对象的语言(oop),逻辑严谨,并且自身集成JDK提供了很多方便的方法,有大量的开源包可以使用。

      2.Java属于C系语言,逻辑思维易于接受,开始接触课程时不容易与课程冲突。

      3.Java简化了与系统的接口,更容易实现GUI的编程。

    学习Java有什么好处和什么坏处

      1.学习Java利于编程逻辑的建立。

      2.Java存在GC内存处理,可以减少很多编程的烦恼和地址的一些难以理解编程内容。

      1.Java封闭了很多编程的东西(尤其是地址等),导致不便于深入理解编程。

      2.Java存在很多细节的东西,深入学习很难。

    学习Java需要注意什么

      勤于练习

      区分和其他语言的区别

      习惯oop特性

      让自己的代码逻辑清晰

      勤于思考

      不要被语言束缚自己

      Java不是Javascript

      如果学习Java可以在熟悉Java后就向androidSDK进行学习

    Java能做什么

      可以做小应用、网站、搜索引擎、Android软件,甚至读书用的kindle,其系统也是使用Java写的。

    Java的学习资料推荐

      <HeadFirst Java> 入门快速理解Java

      Java2核心技术  有上下两本

      Thinking in Java

      下载JDK文档,学会使用JDK文档进行查询

      看一些国内外的视频,网易公开课也有不错的课程,但是学习周期略长

      多练习多写代码

    下面的是建议计算器代码的源码,当然也是参考了一些资料的,如果能闭着眼睛写出来的话,我就不会在这里了。
     
      1 package book;
      2 
      3 import javax.swing.*;
      4 import java.awt.*;
      5 import java.awt.event.*;
      6 
      7 public class Calc extends MouseAdapter {
      8     JFrame list;
      9     // 静态属性
     10     JTextField show;
     11     JButton[] jbNum = new JButton[10];
     12     JPanel jpMain; // 主面板
     13     JPanel jpRight; // 右子面板主要用于存放运算符和等号
     14     JPanel jpLeft; // 左子面板用于存放数字,符号, “.”
     15     
     16     JButton dight; // 小数点
     17     JButton sign; // 正负号
     18     JButton add; // 加号
     19     JButton sub; // 减号
     20     JButton multiply; // 乘号
     21     JButton divide; // 除号
     22     JButton c; // 清除
     23     JButton equal; // 等于
     24     JButton mod; // 取余
     25     JButton sqrt; // sqrt
     26     double sum = 0; // 初始化
     27     boolean b = false; // 监控运算符是否被点击,错误是否出现,用于实现下一次点击按钮时清空
     28     //自定义属性 操作符
     29     operator i = operator.un; // 记录等号符点击前某一运算符点击次数,用于实现连加或者连减等
     30 
     31     int op; // 记录操作符
     32 
     33     // 操作符一包括+-*/%
     34     enum operator {
     35         add, sub, mul, div, mod, sqrt, un
     36     }
     37 
     38     //动态的方法
     39     void display() {
     40         // 创建主窗口,添加一个Text框,
     41         list = new JFrame("计算器");
     42         list.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     43         list.setSize(360, 230);//设置窗口大小
     44         list.setLocation(400, 300);//设置窗口位置
     45         list.setBackground(Color.LIGHT_GRAY); // 设置窗口背景颜色
     46         list.setResizable(false);//设置窗口大小不可调整
     47 
     48         list.setLayout(new FlowLayout(FlowLayout.CENTER));// 采用流体布局
     49         show = new JTextField(25);// 文本框为25列
     50         show.setHorizontalAlignment(JTextField.RIGHT); // 文本框内文字右对齐
     51         show.setEditable(false); // 文本框不可编辑
     52 
     53         list.add(show);
     54         // 创建面板并设置布局
     55         jpMain = new JPanel();
     56         jpRight = new JPanel();
     57         jpLeft = new JPanel();
     58         // 采用的为网格布局方式
     59         jpMain.setLayout(new GridLayout(1, 2));// 主面板采用的是一行两列的网格布局
     60         jpRight.setLayout(new GridLayout(4, 2, 3, 3));
     61         jpLeft.setLayout(new GridLayout(4, 3, 3, 3));
     62         /*四个参数的作用
     63          * rows - 该 rows 具有表示任意行数的值零
     64          *  cols - 该 cols 具有表示任意列数的值零 
     65          *  hgap - 水平间距 
     66          *  vgap- 垂直间距
     67          */
     68         list.add(jpMain);
     69         jpMain.add(jpLeft);
     70         jpMain.add(jpRight);
     71         // 创建0~9按钮对象
     72         for (int i = 9; i >= 0; i--) {
     73             jbNum[i] = new JButton(String.valueOf(i));
     74             jbNum[i].setForeground(Color.BLUE);
     75             jpLeft.add(jbNum[i]);// 左侧布局
     76             jbNum[i].addMouseListener(this);
     77         }
     78         dight = new JButton(".");
     79         sign = new JButton("±");
     80         jpLeft.add(sign);
     81         jpLeft.add(dight);
     82         // 左侧布局完成
     83 
     84         // 右侧布局开始
     85         add = new JButton("+");
     86         sub = new JButton("-");
     87         multiply = new JButton("*");
     88         divide = new JButton("/");
     89         c = new JButton("CE");
     90         equal = new JButton("=");
     91         mod = new JButton("%");
     92         sqrt = new JButton("sqrt");
     93         jpRight.add(divide);
     94         jpRight.add(sqrt);
     95         jpRight.add(multiply);
     96         jpRight.add(mod);
     97         jpRight.add(sub);
     98         jpRight.add(c);
     99         jpRight.add(add);
    100         jpRight.add(equal);
    101         // 右侧布局完成
    102 
    103         // 给所有按钮注册监听器
    104         add.addMouseListener(this);//
    105         sub.addMouseListener(this);//
    106         multiply.addMouseListener(this);//
    107         divide.addMouseListener(this);//
    108         c.addMouseListener(this);// 清除
    109         equal.addMouseListener(this);// 等于
    110         mod.addMouseListener(this);// 求余
    111         sqrt.addMouseListener(this);// 求根号
    112         dight.addMouseListener(this);// 小数点
    113         sign.addMouseListener(this);// 正负号
    114 
    115         list.setVisible(true);// 显示
    116 
    117     }
    118 
    119     public void mouseClicked(MouseEvent e) {
    120         // 0~9的输入
    121         // 最重要的方法-- getSource(),返回产生某事件的对象
    122         if (e.getSource() == jbNum[0]) {
    123             input(0, e);
    124         }
    125         if (e.getSource() == jbNum[1]) {
    126             input(1, e);
    127         }
    128         if (e.getSource() == jbNum[2]) {
    129             input(2, e);
    130         }
    131         if (e.getSource() == jbNum[3]) {
    132             input(3, e);
    133         }
    134         if (e.getSource() == jbNum[4]) {
    135             input(4, e);
    136         }
    137         if (e.getSource() == jbNum[5]) {
    138             input(5, e);
    139         }
    140         if (e.getSource() == jbNum[6]) {
    141             input(6, e);
    142         }
    143         if (e.getSource() == jbNum[7]) {
    144             input(7, e);
    145         }
    146         if (e.getSource() == jbNum[8]) {
    147             input(8, e);
    148         }
    149         if (e.getSource() == jbNum[9]) {
    150             input(9, e);
    151         }
    152 
    153         // 小数点,正负号,C(清除),等号
    154         if (e.getSource() == dight) {// 小数点
    155             if (show.getText().indexOf('.') == -1) {
    156                 show.setText(show.getText() + ".");
    157             }
    158         }
    159         if (e.getSource() == sign) {// 正负号
    160             if (show.getText().indexOf("-") == -1) {
    161                 show.setText("-" + show.getText());
    162             } else {
    163                 show.setText(show.getText().replace('-', ''));
    164             }
    165         }
    166         if (e.getSource() == c) {// 清除
    167             show.setText("0");
    168             sum = 0;
    169             i = operator.un;
    170             b = false;
    171         }
    172         // 加减乘除//取余等运算符
    173         if (e.getSource() == add) {
    174             cal(i);
    175             i = operator.add;
    176             b = true;
    177 
    178         }
    179         if (e.getSource() == sub) {
    180             cal(i);
    181             i = operator.sub;
    182             b = true;
    183 
    184         }
    185         if (e.getSource() == multiply) {
    186             cal(i);
    187             i = operator.mul;
    188             b = true;
    189 
    190         }
    191         if (e.getSource() == divide) {
    192             cal(i);
    193             i = operator.div;
    194             b = true;
    195 
    196         }
    197         if (e.getSource() == mod) {
    198             cal(i);
    199             i = operator.mod;
    200             b = true;
    201 
    202         }
    203 
    204         
    205         // outer 循环外层==========break outer,跳出外层循环
    206         outer: if (e.getSource() == equal) {//等于
    207             try {
    208                 if (i == operator.un) {
    209                     b = true;
    210                 } else {
    211                     if (i == operator.add) {
    212                         sum += Double.parseDouble(show.getText());
    213 
    214                     }
    215                     if (i == operator.sub) {
    216                         sum -= Double.parseDouble(show.getText());
    217 
    218                     }
    219                     if (i == operator.mul) {
    220                         sum *= Double.parseDouble(show.getText());
    221 
    222                     }
    223                     if (i == operator.div) {
    224                         if (Double.parseDouble(show.getText()) != 0) {
    225                             sum /= Double.parseDouble(show.getText());
    226 
    227                         } else {
    228                             show.setText("ERROR");
    229                             b = true;
    230                             sum = 0;
    231                             break outer; // 不执行trimIn()方法 屏幕显示错误
    232                         }
    233                     }
    234                     if (i == operator.mod) {
    235                         sum %= Double.parseDouble(show.getText());
    236                     }
    237                     trimIn(sum);
    238                 }
    239             } catch (Exception ex) {
    240                 show.setText("ERROR");
    241                 b = true;
    242                 sum = 0;
    243             }
    244             sum = 0;
    245             i = operator.un;
    246             b = true;
    247         }
    248     }
    249 
    250     // 用以四则运算和取模的方法
    251     public void cal(operator i) {
    252         try {
    253             if (show.getText() != "ERROR") {
    254                 if (i == operator.un) {
    255                     sum = Double.parseDouble(show.getText());
    256                 }
    257                 if (i == operator.add) {
    258                     sum += Double.parseDouble(show.getText());
    259                     trimIn(sum);
    260                 }
    261                 if (i == operator.sub) {
    262                     sum -= Double.parseDouble(show.getText());
    263                     trimIn(sum);
    264                 }
    265                 if (i == operator.mul) {
    266                     sum *= Double.parseDouble(show.getText());
    267                     trimIn(sum);
    268                 }
    269                 if (i == operator.div) {
    270                     if (Double.parseDouble(show.getText()) != 0) {
    271                         sum /= Double.parseDouble(show.getText());
    272                         trimIn(sum);
    273                     } else {
    274                         // 出现0后,把一切数据重置  特别注意,除数不能为0
    275                         show.setText("ERROR");
    276                         sum = 0;
    277                         b = true;
    278                         i = operator.un;
    279                     }
    280                 }
    281                 // 取余
    282                 if (i == operator.mod) {
    283                     sum %= Double.parseDouble(show.getText());
    284                     trimIn(sum);
    285                 }
    286 
    287             }
    288         } catch (Exception ex) {
    289             show.setText("ERROR");
    290             b = true;
    291         }
    292     }
    293 
    294     // 点击数字输入
    295     public void input(int i, MouseEvent e) {
    296         if (b == true) {
    297             show.setText(String.valueOf(i));
    298             b = false;
    299         } else {
    300             // 判断0和.来清除整数时后面的点
    301             if (show.getText().indexOf('0') == 0 && e.getSource() != dight) {
    302                 show.setText(String.valueOf(i));
    303             } else {
    304                 show.setText(show.getText() + String.valueOf(i));
    305             }
    306         }
    307     }
    308 
    309     // sum的显示,整数的去掉小数点和0
    310     public void trimIn(double sum) {
    311         // if (show.getText().indexOf('.') != -1 &&
    312         // show.getText().endsWith("0")) {
    313         // show.setText((String.valueOf(sum).substring(0, String.valueOf(sum)
    314         // .indexOf('.'))));
    315         // } else
    316         if (String.valueOf(sum).indexOf('.') != -1
    317                 && String.valueOf(sum).endsWith("0")) {
    318             show.setText((String.valueOf(sum).substring(0, String.valueOf(sum)
    319                     .indexOf('.'))));
    320 
    321         } else if (Double.isNaN(sum)) {
    322             show.setText("ERROR"); // 不 是数字时 屏幕显示错误,并把sum置于0 运算符置UN
    323             b = true;
    324             sum = 0;
    325             i = operator.un;
    326         } else if (Double.isInfinite(sum)) {
    327             show.setText("ERROR"); // 出现infinite(无限大)时显示错误SUM置0运算符置UN
    328             b = true;
    329             sum = 0;
    330             i = operator.un;
    331         } else {
    332             show.setText(String.valueOf(sum));
    333         }
    334     }
    335 
    336     /**
    337      * @param args
    338      */
    339     public static void main(String[] args) {
    340 
    341         Calc c = new Calc();
    342         c.display();
    343     }
    344 
    345 }
    View Code

       语言的学习不要把它当作是一种任务,把她当作你的情人,为了优化代码,你需要为她测试千千万万次。当然,一个人学习的时候是非常的枯燥的,最好的方法是找一两个好友,一起学习,一起讨论。这样比你自己一个人学习效率要高很多,同时也能帮你节约时间,一起讨论的结果 印象也会更加深刻。更加有利于自己的学习,一旦形成了这样的良性循环,学习其他语言都是非常迅速的。

      不要害怕问人,同时也不要什么都问,一定要经过自己的简单思考之后再问,问题出在哪里,你自己要知道,不要一上来就说、什么也不知道。大家都是相互学习,水平也都是差不多。不存在嘲笑的意思。

       同时,我们班有些同学是在实验室里面的,希望大家可以充分利用实验室里面的资源。我在16栋741 ,不过是有点远而已,但是如果能够多走点路换来一个好的学习环境的话,我是愿意的。

       事在人为,希望大家珍惜时间,祝大家学习愉快!!!

  • 相关阅读:
    Servlet的生命周期
    HTTP协议简单记录
    Tomcat和JavaWeb目录和流程
    02 html 表格表单
    01 初识HTML
    Python 利用pywin32批量将doc转换成docx再读取成一行存入excel
    power bi 数据红绿灯详细用法
    Linux和Windows启动后台程序
    MySQL导出数据字典
    适用于渗透测试不同阶段的工具收集整理
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/4500150.html
Copyright © 2011-2022 走看看