20145319 《Java程序设计》第二周学习总结
教材学习内容总结
本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,大致包括java语言中的类型,变量,运算符,流程以及基础语法等。
1. 类型
基本类型(每种类型都有其储存范围,如超出范围,即Overflow):
- 整数:可分为short整数(占2字节),int整数(占4字节),long整数(占8字节)三种,例如,int类型的十进制2其实是以000000000 00000000 00000000 00000000 00000010形式存储在内存中。且所占字节越多的整数类型可表示的整数范围越大。
- 字节:即byte类型(占1字节),多用于图像处理,编码处理,也可表示整数,其范围为-128~127
- 浮点数:可分为float浮点数(占4字节),double浮点数(占8字节)主要用来储存小数
- 字符:char类型(占两字节),用来储存字符符号,如‘亚’ ‘索’。
- 布尔:boolean类型,表示true和false。
类类型:详见第四章
2. 变量
- 使用前要声明变量类型,即使用上文所提到过的short,byte,char等关键词来声明
- 不可以数字开头,不可使用特殊字符,常用“驼峰式”命名法,如“int ageOfStudent”
- 在调用变量之前,要对变量初始化,即给变量赋值。ps:如果,在变量赋值后,不打算改变可以加上final,例如final char mid='劫';来防止自己或他人不经意修改
- tips:在表示数字常量时,0b表示二进制数,0x表示十六进制数,如int a=0xC,在表示较长的数字时,使用下划线可以使表达更加清楚。如int b=0b1010 _1010 _1010
3. 运算符
- 条件运算符(Conditional Operator):条件式?成立返回值:失败返回值。如System.out.println("是否及格?%d%n", score>=60?'yes':'no')
- 在逻辑运算符中,&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
4. 类型转换
- 在实际操作中无论是刻意修改还是无心之失,都会出现将变量类型混淆的情况。例如,在默认情况下,整数均为int型,浮点数为double型。像在如下例子中 float PI = 3.14,3.14默认为double型,不能把double型的小数赋给float型,这样就会丢失精度,编译时就会报错。
- 运算时,类型不相同,则运算时会以最长的类型为主。
5. 流程控制
- if……else:类比c语言
- switch:使用效果类似多个if……else语句连用,但是更为简洁,通过不同的switch值进入case语句。
- for:写成for( ……; ……; ……),第一个分号前内容多为变量初始化。第一个分号后为判断,结果为true执行第二个分号后的语句并进入循环,结果为false则结束循环
- while:while(条件式){描述句},先判断条件式是否成立,如果成立,则执行描述句。也可以while(true)直接进入循环,在循环内通过if语句判断,达成某种情况依靠break;结束循环
- break、continue:break为直接结束循环,continue为结束当前循环,跳过之后的描述语句,然后返回开头进行下一轮循环。break、continue还可以配合标签使用,具体过程将在程序实践中展示。
教材学习中的问题和解决过程
- 在学习break、continue配合标签使用时,书上的描述并不是很能让人理解,不大能明白break、continue和标签组合的区别所在,所以只能自己编写程序实验,反复编译后才弄明白它们之间的区别
- java语言和c语言中有许多地方都存在相似之处,但是在c语言中printf("%0.2lf", d);表示把double定义的d精确到两位小数输出,但在java语言中printf("0 and 0 %5d%n", 0&0);表示在输出“0 and 0”之后空五格输出0&0的答案,不知道在java语言中,想要将答案精确到某一位小数后输出应该怎么表示?
代码调试中的问题和解决过程
break、continue配合标签使用
- 代码:
2. 运行结果:
如果continue back1即没有任何结果,输出“helloworld”指令跳过,若continue back2则输出“helloworld”九次
3. 结论:在此并未贴上break和标签组合的代码,但是通过实际操作还是弄清楚了continue和break与标签组合之间的区别。如,continue中back必须设定在进入循环的前一步……
课后作业题1
- 代码:
2. 运行结果:
3. 思路:思路非常清晰,就是密码数学基础中所学到的辗转相除法,在此通过while语句来实现循环,最后当余数为0时结束循环,a即为它们的最小公因子(ps在初始化时,记得事先给yushu变量赋值,这样才能顺利进入while循环)
课后作业题2
- 代码:
2. 运行结果:
3. 思路:最基本的思路就是使用for语句,通过穷举来找出100~1000中的阿姆斯特朗数,唯一的难点就是将i的个位十位百位上的数分离出来,所以将a,b,c都定义为int型,所以在除法中,即使遇到除不尽的数也会自动取整,从而达到目的将个位十位百位上的数分离出来。
其他(感悟、思考等,可选)
- java中基础语法和c语言中基础语法并没有太大区别,所以可以类比学习,则会事半功倍
- 对于书上描述感觉模糊不清之处,或者碰到自己左右摇摆不能确定的地方,还是通过与实践相结合的方式来学习效果会更好,即多动手,这样印象也会更深刻
学习进度条
|
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 |
目标 | 3500行 | 28篇 | 300小时 |
|
第一周 | 150/150 | 1/1 | 20/20 |
|
第二周 | 200/350 | 2/2 | 40/40 |
|
第三周 |
|
|
|
|
第四周 |
|
|
|
参考资料
- ...