20155314 2016-2017-2 《Java程序设计》第2周学习总结
教材学习内容总结
学习目标
- 了解Java编程风格
- 认识Java的类型与变量
- 掌握Java流程控制的方法(分支、循环)
第三章get到的重点
Java中的注释格式
- 单行注释 //注释文字
- 多行注释 /注释文字/
- 文档注释 /**注释文字*/
Java对于整数的三种表现形式
- 十进制 0-9
- 八进制 0-7,满8进1,用0开头表示
- 十六进制 0-9,A-F,满16进1,用0x开头表示
而各种数制的转换,可以利用&运算和>>>来实现
数据类型
数据类型分为基本类型与引用类型。
-
基本类型:
- 数值型:又分为整数类型(byte、short、int、long)和浮点类型(float、double)。
- 字符型:char,字符常量用'',比如‘a’,'4',字符串用"",比如"hello"。
- 布尔型:boolean,只有true和false两种结果。
-
引用类型:
- 类 class
- 接口 interface
- 数组 []
教材学习中的问题和解决过程
在敲书上给的代码过程中,我有意比较了一下正在学的java语言和大一下学期也就是去年学过的C语言的代码风格,此处以教材《Java学习笔记》第76页关于while循环的一个“撞5”小游戏为例,课本给出的代码如下:
public class RandomStop {
public static void main(String[] args) {
while (true){
int number=(int)(Math.random()*10);
System.out.println(number);
if(number==5){
System.out.println("I hit 5...Orz");
break;
}
}
}
}
如果是我用C语言来编的话,我会这样来写:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n;
srand(time(NULL));//设置随机数种子
while()
{
n=rand()%10;//随机产生0~9的数
printf("%d
",n);
if(n==5)
{
printf("I hit 5...Orz");
break;
}
}
return 0;
}
由此比较可以看出,用Java写程序的时候,不需要像C一样在代码顶端写出头文件,而需要先定义类和区块,再接着定义main()方法(Java程序执行的起点)。这里我觉得IntelliJ IDEA有两大非常便捷的地方:
-
在代码编辑窗口中输入
psvm
,然后按tab
,IDEA会帮我们生成main方法public static void main(String[] args) {}
:
对于这么长这么套路的语句我想谁都不愿意每次都按部就班地码上去吧,那么就psv——tab一下好啦~
-
在代码编辑窗口中输入
sout
,然后按tab
,IDEA会帮我们生成System.out.println()
:
print套路也是如此,sou——tab一下,建好这个框架仅需2秒,真是便捷呢(>_<)~
所谓“实践是检验认识真理性的唯一标准”,我在IntelliJ IDEA上把教材第三章课后练习题又敲了一遍,给出了自己的答案,并加上了一些自己的分析,通过逐题进行代码调试实践的方式来深入对java基础语法的理解。小白在此恳请大家积极指出错误的地方(>_<)
3.4.1 选择题
-
D 分析:这一道题引发了我对C和Java两种语言的异同的思考。首先,同样是未给变量赋初值,在C语言Codeblocks环境下
int number; printf("%d ",number);
编译可以通过,但执行结果却是输出随机数;但在JavaIntellij IDEA中
int number;
System.out.println(number);
却连编译都会失败,出现未初始化变量的Error信息:
其次,关于printf
函数的格式不同,在Java中要写成System.out.printf()
,且()
中可以只写已经定义并赋初值的变量名,如上面的System.out.println(number);
,但若变量未被赋初值就会出现编译错误。此外,教材上说System.out.println()
会在标准输出中显示文字后换行,如果使用System.out.print()
则输出文字后不会换行,而System.out.printf()
是标准API,f
是format(格式化)的意思,用在System.out
上,就是对输出文字做格式化后再显示在文本模式中。printf()
的第一个自变量是字符串,其中%d
、%h
、%b
等是格式控制符号。
2. A 分析:同C类似,10和3都是int型,相同类型的数据进行运算之后还是该类型,因此10/3==3而不是3.33333...
因此System.out.println(10/3);
执行时显示3。
![](http://p1.bqimg.com/567571/4d112afdb9eab5f6.png)
-
D 分析:同样是不同类型数据之间转换的典型错误,在C中会得出错误结果,但在JavaIDEA中连编译这关都过不去,出现以下Error信息:
-
D 分析:同上题,不同数据类型的转换会导致编译失败(>_<)
-
A 分析:
Integer.MIN_VALUE
的值是-2^31=-2147483648,
Integer.MAX_VALUE
的值是231=2147483647,但为什么`System.out.println(Integer.MAX_VALUE+1==Integer.MIN_VALUE);`执行时就会显示true呢?原来,`Integer.MAX_VALUE`的值为231,2^31+1=01111111 111111111111111111111111+1 =10000000 00000000 00000000 00000000,最高位是符号位为1,这个数是负数,负数的源码是补码取反+1,刚好等于2^32即Integer.MIN_VALUE
的值!!
震惊!居然要用到补码的知识!因此本题执行结果为true啦。 -
B *有同学说网上给的参考答案是A,但是我机跑出来是false呀!求解(>_<)
-
A 分析:这题和第8题主要考查对基础语法
i++
和++i
的区别和理解,在C语言中也算是比较经典的一对了,常与赋值语句连用,特别容易使小白混淆(>_<)如本题的int number=i++;
,在小白的印象中赋值号=
是从右往左执行的,莫非是将i++
赋给number
???NO!这句话的意思其实是先将i
的值(为10)赋给变量number
,之后再执行i++
,即i
的值变为11!!而下一条语句number=--i;
则是先执行i=i-1;
,再将i
的值(为10)赋给变量number
~常识啊常考!(敲黑板!) -
D 分析:同第7题。
-
A 分析:因为在for循环中有这段代码
if(i==5){continue;}
的缘故啦,也就是碰到5就跳过,于是输出结果便为: -
D 分析:for循环执行的条件为
number!=5
,即当number
的值为5的时候终止循环;循环重复式为number=(int)(Math.random()*10)
,意思是随机产生0~9的数。其实本题与书上76页给出的“很无聊的游戏”——“撞5”游戏类似,执行这个程序后会一直生成0~9的随机数并打印直到生成5为止(不打印),脸黑就会如下图(>_<):
3.4.2 操作题
-
如果有
m
与n
两个int
变量,分别储存1000与495两个值,请使用程序算出最大公因子。我的程序:
public class MaxCommonFactor { public static void main(String[] args) { int m=1000; int n=495; int r; while (n!=0) { if(m>=n){ r=m-n; } else r=m; m=n; n=r; } System.out.println(m); } }
输出结果:
-
在三位的整数中,例如153可以满足13+53+3^3=153,这样的数称为阿姆斯特朗(Armstrong)数,试以程序找出所有三位数的阿姆斯特朗数。
我的程序:
public class ArmstrongNumbers { public static void main(String[] args) { for(int n=100;n<=999;n++){ int g=n%10; int s=n/10%10; int b=n/100%10; if(n==g*g*g+s*s*s+b*b*b){ System.out.println(n); } } } }
输出结果:
代码调试中的问题和解决过程
-
本周通过娄老师的指导和百度自行解决了git提交中文会显示乱码的问题并彻底根除困扰我多周的macOS下终端乱码的毛病~很开心(>_<)
可以和之前的乱码形成鲜明的对照(/ω\)
但是解决完之后貌似每次使用git commit -m"中文"
的时候终端会间歇性地崩溃??!这个目前真的无解O.o老这么下去可不行啊O.o
-
本周还在娄老师的建议下将Eclipse换成了Intellj IDEA并自行百度注册码成功进行了破解,感觉写起Java来比之前的更棒了(>_<)还带有将文件添加至git的功能哟~
顺带贴上我用IEDA写的第一个Java程序图~
对你没有看错其实这就是娄老师安利的Intellj IDEA 简易教程里的代码调试教学QAQ这里顺便putdown一下非常重要的考试考到了我没有写出来的调试相关的知识:
调试
程序设计中有三类错误:
- 编译时错误:语法错误,初学者易犯
- 运行时错误:异常处理
- 逻辑错误:能编译运行,但运行结果不对
逻辑错误是大家学习中遇到最多的错误,要学会通过调试(Debug)来定位逻辑错误,常用技能有:
- 自顶向下进行调试
- 学会设置断点(行断点/函数断点/条件断点/临时断点)
- 学会单步运行
- 循环的调试
- 函数(方法)的调试
- 二分法定位错误
- ...
调试程序首先要会设置断点和单步运行。
代码托管
- 代码提交过程截图:
- 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图
- 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图
- 代码量截图:
- 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图
- 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图
- 运行statistics:
上周考试错题总结
2016-2-17-2《Java程序设计》第一周测试(A卷)
- Linux Bash中,使用(groups)命令来查看用户属于哪些用户组。
- Linux Bash中,使用cat命令带行号查看test内容的命令是(cat –n test)。
- Linux Bash中,查找home目录中昨天创建的文件的命令是(find ~ -ctime 1)。
- Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)。
- Linux Bash中,zip命令使用(-e)参数可以创建加密压缩包。
- Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序 )。
- Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是( grep main *.c )。
2016-2017-2《Java程序设计》第二周测试(A卷)
- 在src目录中编译图2.23中Main.java代码的命令是(javac –d . Main.java)。
- (git init )命令可在在工作目录中创建新的 Git 仓库。
- 在每次提交进都要执行git init命令。(X)
- (git push)将本地分支的更新,推送到远程主机。
- 执行 git clone 命令可以拷贝一个远程 Git 仓库到本地,让自己能够查看该项目,或者进行修改。(ok)
- git log 命令来查看(提交历史)
- IDEA教程中IDEA的安装是通过Toolbox来安装的。(OK)
- IDEA教程中有关调试有四种断点:行断点,方法(函数)断点,(条件断点)和临时断点。
错题总结:主要是当时git还没学会>_<对我来说相当陌生QAQ这周通过帮许多同学配置各种平台下的git,我已经熟练掌握git相关知识,现在看起来So easy啊:(
其他(感悟、思考等,可选)
-
本周我终于终于在macOS上把传说中的git弄好啦~虽然在这期间遇到了各种各样的问题,但总体来说并没有想象中那么复杂,跟着娄老师给的教程使用开源中国(码云)托管代码和使用码云和博客园学习简易教程(小白福利)一步步走下去就好了~其实在自己弄好之前,我默默地帮许多使用Linux和windows平台的同学配置好他们的git并成功托管代码(做好事不留名)~贴张图纪念一下自己的git(>_<)
-
既然在macOS上有一款好用的JavaIDE——Intellj IDEA或Eclipse,那么在macOS上就必然有专门为C语言和C++设计的IDE,于是我便从百度上get到了一款同样似乎是为macOS量身定做的C IDE——CLion,在Clion上写C代码有着跟IDEA上写Java一样棒的体验哟~现在回头看windows上的Codeblocks、VC6.0什么的都弱爆了(>_<)
IDEA和Clion如此相似,如同孪生 -
今天闲来无事开win7虚拟机跑了下游戏,没想到mac异常的卡,卡到无法自拔,打开活动监视器一看立刻震惊,运行内存快到8G极限了!吓得我赶紧秒关了虚拟机(>_<)还有,Intellj IDEA和CLion也是俩内存杀手,同时开多了肯定是非常令mac受不了的:(
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 34/34 | 1/4 | 12/12 | |
第二周 | 360/394 | 1/5 | 16/28 |
-
计划学习时间:10小时
-
实际学习时间:16小时
-
改进情况:博客拖延得没辣么严重了但是还是会拖!得改(>_<)