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('-', '\0'));
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 ,不过是有点远而已,但是如果能够多走点路换来一个好的学习环境的话,我是愿意的。

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

 

posted @ 2015-05-13 13:25  小军的代码库  阅读(324)  评论(0编辑  收藏  举报