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后就向android的SDK进行学习
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 }
语言的学习不要把它当作是一种任务,把她当作你的情人,为了优化代码,你需要为她测试千千万万次。当然,一个人学习的时候是非常的枯燥的,最好的方法是找一两个好友,一起学习,一起讨论。这样比你自己一个人学习效率要高很多,同时也能帮你节约时间,一起讨论的结果 印象也会更加深刻。更加有利于自己的学习,一旦形成了这样的良性循环,学习其他语言都是非常迅速的。
不要害怕问人,同时也不要什么都问,一定要经过自己的简单思考之后再问,问题出在哪里,你自己要知道,不要一上来就说、什么也不知道。大家都是相互学习,水平也都是差不多。不存在嘲笑的意思。
同时,我们班有些同学是在实验室里面的,希望大家可以充分利用实验室里面的资源。我在16栋741 ,不过是有点远而已,但是如果能够多走点路换来一个好的学习环境的话,我是愿意的。
事在人为,希望大家珍惜时间,祝大家学习愉快!!!