20145328 《Java程序设计》第2周学习总结

20145328 《Java程序设计》第2周学习总结

教材学习内容总结

掌握了上周没有学会的IDEA的用法

掌握了一些快捷键用法,在用IDEA编写程序的过程中的体验比直接使用cmd进行编写方便很多,以下附上IDEA设置完成后当天对IDEA编程的尝试(Hello World)

java中的基本类型

  • 整数:可细分为short(占2字节)int(占4字节)long(占8字节)
  • 字节:byte,若用于表示整数,byte可表示-128~127的整数
  • 浮点数:主要用于存储小数数值,可分为float(占4字节)double(占8字节)
  • 字符:char,汉字、英文字符都是双字节的,Java字符编码是Unicode6.2.0JVM编码是UTF-16 Big Endian
  • 布尔:boolean类型可表示truefalse,表示逻辑的

int可储存的整数范围为-2147483648~2147483647

注释

  • 单行注释://

  • 多行注释:/**/,编译程序会忽略/**/之间的文字

  • javadoc文档注释:/***/

  • 注释注意事项:

- 给函数和全局数据加上注释
- 要澄清情况,不要添乱子
- 不要大谈明显的东西
- 不要注释差的代码,重写它
- 不要与代码矛盾(javadoc)

变量

  • 变量的数值可以在同一类型范围内不断变化
  • 关于变量的命名,一般按照驼峰式(Camel Case)命名的方法,以小写字母开始,并在每个单字开始时第一个字母使用大写。
  • 关于变量的使用,在调用变量之前,一定要对该变量进行初始化,即给变量要指定值后才能使用;如果不想后面的操作对变量的值进行更改,在赋值时应该在赋值语句前加上final,例如:final double PI = 3.141596,则后续的操作就不能对其进行重新赋值,否则编译时会报错。
  • 在表示数字常量时,用0b表示二进制数,用0x表示十六进制数。

运算符

  • 在逻辑运算符中,&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;
  • 同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
  • 在递增、递减运算符中,就要注意运算符是放在变量的左边还是右边,如果运算符在变量左边,则先改变变量值再进行运算,如果运算符在变量右边,则先进行运算再对变量进行相应的加减变化。

类型转换

  • 类型与变量看似简单,但是很多时候编译不通过,可能就是这些细节不注意。Java中对变量类型区分是非常严格的,在不特别指明的情况下,整数一般为int类型,小数则默认为double型,如果不特别注意这些就容易犯错,例如: float PI = 3.143.14默认为double型,不能把double型的小数赋给float型,这样就会丢失精度,编译时就会报错。
  • 另一种情况,就是不同类型的操作数在进行运算时要遵循一些原则。如果操作数都是不大于int的整数,则自动全部提升为int类型进行运算;如果运算时,类型不相同,则运算时会以最长的类型为主。
    流程控制

if...else条件式

  • 需要注意的是一定要把执行的语句用大括号括起来,否则,默认的是只执行if后的第一句。

switch条件式

  • switch有点像多个分支的if语句,但在某些情况下,用switch可以提高代码的效率,书本上也有相应的例子,不用进入每个if语句去判断,可以通过待判断的值直接进入相应的case,只是注意switch一般都会配以break一起使用,编写代码时不能忘记这一点。

for循环

  • 与C语言中的for循环基本一样,写代码时养成先写##for(;;)##的习惯,这样不会漏必要的元素,如果判断部分没有任何说明,则默认是true,即是一个无限循环。

while循环

  • 当型循环:while(条件式){描述句},先判断条件式的布尔类型,如果成立,则执行描述句。
  • 直到型循环:do{描述句}while(条件式);,特点是先执行一遍描述句,再判断条件,如果条件成立就再执行一遍描述句,直到条件不成立为止。
  • 需要注意的是:while的两种类型的区别,在写法上,注意当型while后没有分号,第二种有分号。

break continue

  • break:结束当前循环。
  • continue: 跳过当前循环一次。
  • breakcontinue还可以和标签一起配套使用。break与标签配套时,则结束该标签包含的所有语句;continue与标签配套时,则跳过该标签包含的所有语句。

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

本周学习的难点并不多,关于关键字、标识符、注释、常量与变量、运算符、语句、函数、数组等相关概念在学习C语言的时候已经接触过了,学习的时候进行对比就能够很快上手,在教材学习中遇见的一个比较难理解的问题就是关于printlnprintf的区别,因为在之前C语言的学习中并没有这方面的差异。

该问题在调试如下程序时得到了解决

public class Comparison {
    public static void main(String[] args) {
        System.out.printf("10 >  5 结果 %b%n",10 > 5);
        System.out.printf("10 >= 5 结果 %b%n",10 >= 5);
        System.out.printf("10 <  5 结果 %b%n",10 < 5);
        System.out.printf("10 <= 5 结果 %b%n",10 <= 5);
        System.out.printf("10 == 5 结果 %b%n",10 == 5);
        System.out.printf("10 != 5 结果 %b%n",10 != 5);
    }
}

下面是程序运行的结果

而将上面的程序中所有的printf改成println之后的运行结果如下所示

有了上述例子进行对比之后,才理解了

println是用于输出参数内容,然后换行,其参数个数固定为一个,而printf是用于输出带各种数据类型的占位符的参数,其参数个数是不定的

这段话的含义

代码调试中的问题和解决过程

在九九乘法表程序中,书上的程序如下所示

public class NineNineTable {
    public static void main(String[] args) {
        for(int j = 1; j < 10;j++){
            for(int i = 2; i < 10;i++){
                System.out.printf("%d*%d=%2d ",i,j,i*j);
            }
            System.out.println();
        }
    }
}

其运行结果如下

虽然输出的结果是正确的,但是为什么在第二个for循环中为什么int i=2,如果将int i=2改成int i=1会出现什么样的结果,修改后的程序如下

public class NineNineTable {
    public static void main(String[] args) {
        for(int j = 1; j < 10;j++){
            for(int i = 1; i < 10;i++){
                System.out.printf("%d*%d=%2d ",i,j,i*j);
            }
            System.out.println();
        }
    }
}

运行结果如下

对比后可发现,若i从2开始,则打印出来的九九乘法表是9行8列的,若i从1开始,打印出来的九九乘法表则是9行9列的,若是将for(int i = 1; i < 10;i++)修改成for(int i = 1; i <= j;i++),则可打印出如下图所示的阶梯形九九乘法表,就观感体验上来说比前面两个要简洁得多

阶梯形九九乘法表程序如下

public class NineNineTable {
    public static void main(String[] args) {
        for(int j = 1; j < 10;j++){
            for(int i = 1; i <= j;i++){
                System.out.printf("%d*%d=%2d ",i,j,i*j);
            }
            System.out.println();
        }
    }
}

书上还有另外一种只利用一个for循环就完成九九表打印的例子如下

public class NineNineTable2 {
    public static void main(String[] args) {
        for(int j = 1,i = 2; j < 10; i = (i==9)?((++j/j)+1):(i+1)){
            System.out.printf("%d*%d=%2d%c",i,j,i*j,(i==9 ? '\n' :' '));
        }
    }
}

研究之后可知System.out.printf("%d*%d=%2d%c",i,j,i*j,(i==9 ? '\n' :' '));这一句是对i的值进行判断,若i=9就在算式后打印换行符,否则打印空格。

而循环条件中i = (i==9)?((++j/j)+1):(i+1)的意思是每进行一次for循环之后,对i值进行判断,若i=9执行j+1后整除j的所得数+1,否则i+1

编译执行结果与前面第一个九九表相同,也算是理解了为什么只用一个for循环就可以打印九九表,不过这样一来程序的可读性要比之前的两个for循环的差上不少。

学习感悟

就现阶段的学习而言,对着教材敲代码的确是一个学习的好方法,不过也不能只敲书上有的代码,对于一些代码不理解的地方,以及一些不能理解的概念,尝试着对代码进行修改,然后对比运行结果,这样对于理解为什么代码要这么用有很大的帮助

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 40篇 500小时
第一周 30/30 3/7 28/28
第二周 120/150 1/8 23/41

参考资料

posted @ 2016-03-13 17:34  20145328胡东晖  阅读(396)  评论(3编辑  收藏  举报