20182320 2019-2020-1 《数据结构与面向对象程序设计》第2-3周学习总结

20182320 2019-2020-1 《数据结构与面向对象程序设计》第2-3周学习总结

教材学习内容总结

1、第二章知识点:

  • 字符串
  • 变量及其赋值
  • 基本数据类型
  • 表达式
  • 数据转换
  • 读输入数据

(1)字符串

  • 在Java中,字符串的定义与在C语言中极为相似,即一串字符,不过多叙述。
  • 在Java中,字符串是一个对象由String类定义
  • 使用print命令输出字符串println命令输出一行字符串(即输出完后换行)
  • 字符串与字符串间用“+”连接
  • 若想在输出语句中打出诸如双引号“"”在内的转义字符,需要在前面加上“/”,和C语言类似。

(2)变量和赋值

  • Java中的变量定义、常量定义、赋值语句及它们的语法规则都与在C语言中极其相似,不多叙述。
  • 需要注意在定义变量时不要使变量名和一些重要标识符重名,否则会出错。

(3)基本数据类型

  • 这部分内容也与C语言的内容有重合。

例如:

整型变量int、short、long,浮点型float、double、相同的字符类型和控制符……

  • Java中的数值只有整型和浮点型两类
  • 还出现了比short更小的整型byte和不常见的boolean类型(布尔值)

(4)表达式

  • 内容与C相似。
  • 注意类似“变量++”和“++变量”在不同情境下的区别:

前者为先赋值后自增,后者为先自增后赋值

(5)数据转换

  • 内容与C相似。
  • 强制转换运算符仅在当前命令行有效。
  • 位宽转位宽的数据类型转换中,数据安全。位宽转位宽的数据类型转换中,数据会部分丢失

(6)读输入数据

  • Scanner是一个类,其中封装了许多方法。要调用这些方法需要用Scanner类创建一个对象。在使用Scanner之前还要告诉系统需要使用。

简单来说就是:在使用Scanner的时候,要在前面打上:

$ improt java.util.Scanner;

这个类似于C的include头文件,Scanner类属于java.util类库。

还要在主方法(我们在C中称主函数)中打上

$ Scanner scan = new Scanner (System.in);

这个意思是用Scanner类创建一个变量scan,这个scan代表一个用new运算符来创建的Scanner对象,后面的System.in代表系统默认输入

  • 在输入完上面两个东西之后,就要定义一个字符串型变量来接收输入的字符串,例如:
$ String message;

就是定义一个叫“message”的字符串变量

  • 然后就是输入命令:
$ message = scan.nextLine();

这个意思是将接下来输入的行(nextLine)作为字符串赋给字符串变量message

2、第三章知识点

  • 创建对象
  • String类
  • Random类
  • Math类
  • 格式化输出
  • 枚举类型
  • 包装类

(1)创建对象

要点:

  • 对象要用类来创建。
  • 变量名可以表示一个基本类型的值,也可以表示一个对象。
    例如:
$ int num;(定义一个整型变量num)
$ String name;(创建一个String对象)

也称"name"为对象变量。

  • 对象变量只保存对象的地址,而不保存其本身。
  • 在定义变量或创建对象之后,要对其进行初始化(类似于变量的赋初值),否则编译时会报错。
  • 创建对象并初始化(以String为例)的完整过程如下:
$ String name;
$ name = new String();
$ name = "xxx";

可以简写为:

$ String name = new String("xxx");

这里的我们使用运算符"new",调用构造方法"String()"来创建对象。

  • 实例化对象之后,我们可以通过"."来调用他的方法。例如:
$ count = name.length();
  • 关于别名:
    假定有两个String对象:
$ String name1 = "Hello!";
$ String name2 = "Hello world!";

当把name2赋值给name1:

$ name1 = name2;

现在他们都指向了同一个字符串常量"Hello wolrd!"的地址,他们现在互为别名

注意:仅针对字符串。

(2)String类

  • String类的对象一旦被创建,长度就不能再更改。
  • 在String的某些方法中会用到"下标"这个概念,类似于C语言中的数组。

(3)包

  • 包指的是Java中提供的标准类库的名称。
  • 每个类库里面都包含许多类,需要调用里面的类时要在代码前声明。例如:

要调用Scanner类时,要在前面声明

$ import java.util.Scanner;
  • java.lang包会默认调用。

(4)Random类:

  • Random类用来生成伪随机数。
  • 使用时,如下创建对象:
$ Random 对象名 = new Random();
  • 使用方法时,注意生成的伪随机数的范围
$ 接收随机值的变量 = Random对象名.nextFloat();

所产生的伪随机数范围为0-1(包含0不包含1)

(5)Math类

  • Math类属于java.lang包。
  • 里面所有方法都是静态的,可以直接用类名调用:
$ value = Math.abs(total);

(6)格式化输出

NumberFormat类

DecimalFormat类

都用于将数据进行某一格式的处理后输出。

(7)枚举类型

  • 在一个变量只能取少数几个值时使用。
  • 使用如下:
$ enum Season {winter,spring,summer,autumn};

用enum创建名为Season的对象,并规定他的取值只能为四个季节的名称。

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

  • 问题1:

对Java中的类、对象等名词的定义难以理解,也难以记忆。

  • 问题1解决方案:

借助网站(https://www.runoob.com/java/java-object-classes.html)
这个网站上面有对Java各种名词定义的充分解释,同时带有形象的例子,阅读完之后能对Java的基本名词有更细致的了解。

如下:

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

  • 问题1:在做PP2.2时报错

  • 问题1解决方案:
    发现使用Scanner()构造方法时没有输入System.in,而且在除法的除数使用了浮点型。修改后就编译成功了。

  • 问题2:在做PP2.4时遇到问题,华氏度与摄氏度的转换公式中有一个小数除法,无法直接实现

  • 问题2解决方案:将小数改为分数,解决。

  • 问题3:在做PP2.4时报错

  • 问题3解决方案:发现类的名字和文件名不统一,修改后解决。

  • 问题4:在做PP2.6时,发现若如下编写代码

    会得到如下运行结果:

    会依次打出数字而不是将他们相加。

  • 问题4解决方案:将数字提出来先相加后赋值给一个变量,然后再输出这个变量。

  • 问题5:在做PP3.1时,使用了Random类的nextInt来取随机数,代码如图:

    但是发现出现数字不在10-99范围内的问题:

  • 问题5解决方案:最后通过查书发现,nextInt()不同于nextFloat(),nextInt()取值为整型的随机数,而nextFloat()才是0-1的浮点数,所以不能得到相应结果。将其修改成nextInt(90)+10就能解决了。

  • 问题6:在做PP3.5时,发现编译时报错

    这里面不仅提示了DecimalFormat为找不到的标识符,还提示了数据有可能在赋值时溢出。

  • 问题6解决方案:发现是没有添加DecimalFormat的头文件java.text,而且Pi的赋值超出了float类型的长度。添加头文件并修改float为double即解决。

代码托管

上周考试错题总结

错题1:

Which memory capacity is the largest? (哪个选项的存储容量最大?)

A.1,500,000,000,000 bytes (1,500,000,000,000个字节)

B.100 gigabytes (100千兆字节)

C.3,500,000 kilobytes (3,500,000千字节)

D.10 terabyte (10太字节)

E.12,000,000 megabytes (12,000,000百万字节)

选择B 正确答案E

原因1:

见识少,也没见过megabyte这么大的单位,也没注意到E选项,有点粗心。

理解1:

常用单位:

image

错题2:

Volatility is a property of (易变性是___的性质)

A.RAM (随机存储器)

B.ROM (只读存储器)

C.disk (磁盘)

D.software (软件)

E.computer networks (计算机网络)

选择D 正确答案A

原因2:

在第一章的自学中没有看到相关概念。

理解2:

这里的易变形应该指的是易失性,指的是随机存储器在断电之后不会保留数据,只能将数据保存在外存中。

错题3:

It is important to dissect a problem into manageable pieces before trying to solve the problem because (试图解决问题之前,把一个问题分解成可控制的几部分是很重要的,因为)

A.most problems are too complex to be solved as a single, large activity (大多数问题太复杂,以至于不能作为一个单独大型的活动来解决)

B.most problems are solved by multiple people and it is easy to assign each piece to a separate person (大多数问题都是由很多人解决的而且把每一部分分配给不同的人是很容易的)

C.it is easier to integrate small pieces of a program into one program than it is to integrate one big chunk of code into one program (将程序的小部分整合到一个程序中比将一大块代码整合到一个程序中更容易)

D.our first solution may not solve the problem correctly (我们的第一个方案可能无法正确解决问题)

E.all of the above (以上皆是)

选择E 正确答案A

原因3:

只注重每个选项其本身的正确与错误,没有联系题目本身。

理解3:

当问题太大,我们将拆分他以免他太过复杂。

答案D本身没有问题,但是这不是拆分一个问题的理由。

错题4:

Java is an example of a(n) (Java是一个___的例子)

A.machine language (机器语言)

B.assembly language (汇编语言)

C.high-level language (高级语言)

D.fourth generation language (第四代语言)

E.both C and D (C和D都是)

选择C 正确答案E

原因4:

书上明确指出Java属于高级语言,但是并没有指出它是不是第四代语言。

理解4:

根据第四代语言的多种特征,Java确实属于第四代语言。

错题5:

Java is an example of a(n) (Java是一个___的例子)

A.machine language (机器语言)

B.assembly language (汇编语言)

C.high-level language (高级语言)

D.fourth generation language (第四代语言)

E.both C and D (C和D都是)

选择C 正确答案E

原因5:

书上明确指出Java属于高级语言,但是并没有指出它是不是第四代语言。

理解5:

根据第四代语言的多种特征,Java确实属于第四代语言。

错题6:

The main method for a Java program is defined by (Java程序中的主方法是由___定义的)

A.public static main( )

B.public static main(String[ ] args);

C.public static main(String[ ] args)

D.private static main(String[ ] args)

E.the main method could be defined as in A, C or D but not B

(主方法可以定义为A,C或者D,但不是B)

选择E 答案C

原因6:

在A中,缺少参数。这些参数将在稍后的文本中定义,但实际上,它们允许用户运行程序,并在程序调用时包含一些初始参数。

在B中,语句末尾的分号是不允许的。

在D语言中,“private”而不是“public”会使程序不能被任何人执行,从而使定义变得毫无意义。

理解6:

还是对Java的语句结构了解不够透彻。

错题7:

The instruction: System.out.println("Hello World"); might best be commented as (这个指令最好被注释为)

A.// prints "Hello World" to the screen (将"Hello World"打印到屏幕上)

B.// prints a message (打印一条信息)

C.// used to demonstrate an output message (用来演示输出信息)

D.//

E.// meaningless instruction (没有意义的指令)

选择D 答案C

原因7:

A和B中的注释表示明显,而D和E中的注释表示无意义。

C语言中的注释解释了为什么指令会出现在程序中。

理解7:

个人感觉A,B和C表示的都是一样累赘的意思。

错题8:

Which of the following characters does not need to have an associated "closing" character in a Java program? (在一个Java程序中,下面哪个字符不需要有与之相关的“结尾”字符?)

A.{

B.(

C.[

D.<

E.all of these require closing characters (以上都需要结尾字符)

选择E 答案D

原因8:

{用于打开一个模块,因此}用于关闭该模块。

(用于打开表达式,因此)是关闭表达式所需要的。

[用于启动数组索引,因此]需要关闭数组索引。

<是“小于”,>是“大于”,这两个值不需要放在一起,所以<不需要关闭字符。

理解8:

忘了还有单独拿出来当比较符的情况。

错题9:

Java byte codes are directly executable whereas Java source code is not. (Java字节码是可以直接执行的,而Java源代码则不是。)

A.true

B.false

选择B 答案A

原因9+理解9:

Java源代码和Java字节码都不能直接执行,因为他们都不是机器语言。

字节码只是可以编译得比源代码快一点而已。

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182307
    • 结对学习内容
      • 编写类
      • 格式化输出
      • 编写一个计算器程序
      • ……
  • 上周博客互评情况

其他(感悟、思考等,可选)

学号Java的关键在于理解书上的代码,而理解代码的关键是要弄清楚代码的结构,例如:类的结构、声明的结构……不仅要弄清楚代码是如何打的,更要弄清楚整个系统、整个语言是以一个什么逻辑在运作。

参考资料

《Java程序设计与数据结构教程》(第二版)

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 208/208 2/2 9/9
第一周 258/466 2/4 15/24
posted @ 2019-09-22 14:20  郑力元  阅读(228)  评论(1编辑  收藏  举报