20155314 2016-2017-2 《Java程序设计》第2周学习总结

教材学习内容总结

学习目标

  1. 了解Java编程风格
  2. 认识Java的类型与变量
  3. 掌握Java流程控制的方法(分支、循环)

第三章get到的重点

Java中的注释格式

  • 单行注释 //注释文字
  • 多行注释 /注释文字/
  • 文档注释 /**注释文字*/

Java对于整数的三种表现形式

  • 十进制 0-9
  • 八进制 0-7,满8进1,用0开头表示
  • 十六进制 0-9,A-F,满16进1,用0x开头表示

而各种数制的转换,可以利用&运算和>>>来实现

数据类型

数据类型分为基本类型与引用类型。

  • 基本类型:

    1. 数值型:又分为整数类型(byte、short、int、long)和浮点类型(float、double)。
    2. 字符型:char,字符常量用'',比如‘a’,'4',字符串用"",比如"hello"。
    3. 布尔型:boolean,只有true和false两种结果。
  • 引用类型:

  1. 类 class
  2. 接口 interface
  3. 数组 []

教材学习中的问题和解决过程

在敲书上给的代码过程中,我有意比较了一下正在学的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",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 选择题

  1. D 分析:这一道题引发了我对C和Java两种语言的异同的思考。首先,同样是未给变量赋初值,在C语言Codeblocks环境下

     int number;
    printf("%d\n",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)
  1. D 分析:同样是不同类型数据之间转换的典型错误,在C中会得出错误结果,但在JavaIDEA中连编译这关都过不去,出现以下Error信息:

  2. D 分析:同上题,不同数据类型的转换会导致编译失败(>_<)

  3. 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啦。

  4. B *有同学说网上给的参考答案是A,但是我机跑出来是false呀!求解(>_<)

  5. 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~常识啊常考!(敲黑板!)

  6. D 分析:同第7题。

  7. A 分析:因为在for循环中有这段代码if(i==5){continue;}的缘故啦,也就是碰到5就跳过,于是输出结果便为:

  8. D 分析:for循环执行的条件为number!=5,即当number的值为5的时候终止循环;循环重复式为number=(int)(Math.random()*10),意思是随机产生0~9的数。其实本题与书上76页给出的“很无聊的游戏”——“撞5”游戏类似,执行这个程序后会一直生成0~9的随机数并打印直到生成5为止(不打印),脸黑就会如下图(>_<):

3.4.2 操作题

  1. 如果有mn两个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);
    }
    }

输出结果:

  1. 在三位的整数中,例如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" 并截图

  • 代码量截图:
    • 运行 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小时

  • 改进情况:博客拖延得没辣么严重了但是还是会拖!得改(>_<)

参考资料

20155314 2016-2017-2 《Java程序设计》第2周学习总结的更多相关文章

  1. 20155336 2016-2017-2《JAVA程序设计》第九周学习总结

    20155336 2016-2017-2<JAVA程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC(Java DataBase Connectivity)即java数据库连接 ...

  2. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  3. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  4. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  5. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  9. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  10. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

随机推荐

  1. python之迭代

    1.何为迭代: 对于给定list或者tuple,通过for循环来遍历这个list或tuple,这种遍历我们称之为迭代(Iteration). 2.python中利用for...in语句来完成迭代语句: ...

  2. CSS 样式初始化

    去除浏览器对html的附加样式,避免不同浏览器之间的样式差异,给前端开发提供统一的样式基础.附加样式: .clearfix - 清除浮动 .wordsBreak - 允许文本在任意位置的换行 .ell ...

  3. redis 命令clear、set、get、del、rename、keys *、exists、type、expire、expireat、persist、ttl、move、select

    清屏 clear 新增/修改set 查询get 删除del 修改key rename old new 查询所有的key keys *查询一个key是否存在 exists,有返回1,没有返回0查询值的类 ...

  4. TYPE_SCROLL_INSENSITIVE is not compatible with CONCUR_UPDATABLE

    There are two options when setting ResultSet to be scrollable: TYPE_SCROLL_INSENSITIVE - The result ...

  5. Django Redis验证码 密码 session 实例

    1.settings CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCach ...

  6. selenium&PhantomJS笔记

    配置pip文件 Windows下pip 配置文件的位置%HOME%/pip/pip.ini linux下安装pip,以Debian Linux为例su -apt-get install python- ...

  7. Jmeter入门--安装教程

    jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动 ...

  8. JavaScript运行机制的学习

    今天在偶然在网上看到一个JavaScript的面试题,尝试着看了一下,很正常的就做错了,然后给我们前端做,哈哈,他居然也顺理成章做的错了,代码大概是这样的 /*1 下面代码会怎样执行?执行结果是什么* ...

  9. SQLServer SELECT @@IDENTITY 遇到的坑

    经常在写存储过程的时候获取当前插入后的ID都会用  @@IDENTITY 但是今天在用 @@IDENTITY的时候涉及到当前数据的插入会有insert触发器发生时,发现与实际插入的ID值对不上,网上查 ...

  10. Linux的Transparent Hugepage与关闭方法

    Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变. 因为Transparent HugePages是在运 ...