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

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

教材学习内容总结

  • 第二章 数据和表达式 主要介绍了字符串连接、变量和赋值、基本数据类型等编写程序所需了解具备的基础知识,与读输入数据等最简单的语句使用方法
  • 第三章 使用类和对象 主要介绍了几个常用的类及其方法,如String类、Random类、Math类以及可用于格式化输出的NumberFormat和DecimalFormat两个类;进一步揭示了包、类、对象、方法之间的关系

学习笔记:

  • Java中三种输出方法:print输出不换行;println输出且换行;printf允许打印包含数据值在内的格式化字符串
  • “+”的使用方法:连接字符串;用于加法 的算术运算符
  • 特殊的转义字符
转义字符 含义
\" 双引号
\' 单引号
\\ 反斜杠
  • 一般不能将一个类型的变量的值赋值给与之不匹配的另一个类型的变量,但若要用于强制转换数据类型,可以使用直接赋值来进行转换。赋值转换中加宽转换是允许且不会丢失数据的,缩窄转换会引起编译程序的错误信息,信息容易丢失
  • 关键字final说明该被声明的标识符是常量
  • 各类型常量的声明
    26
  • 读输入数据:Scanner类
    • 调用Scanner类的方法——创建一个对象:Scanner scan = new Scanner(System.in);
    • System.in对象代表标准输入流
    • Scanner类的next方法用来读入不同类型的数据
  • new运算符创建对象时,先调用构造方法来创建它。构造方法是与类同名的一个特殊方法。
    • 创建String对象时,不用特意调用new运算符,因为当出现字符串常量时,系统会自动创建一个String对象。
  • 别名:指向同一个对象的不同的引用变量(reference variable)
  • String类
    • String对象是不可变的,但String类中的方法可以修改原字符串。
    • 方法是对一个具体对象施加的,所以该对象被方法修改时的状态会影响执行的结果
  • import声明
    • 除了java.lang包中的类是自动使用的以外,若要调用其他包中的类,需要使用一个import声明
    • *号代表包中可能会用在程序中的任何类
  • Random类
    • 可用于生成伪随机数
    • int nextInt(N)-M方法:生成0-M~N-1-M范围内的int型随机数
    • float nextFloat()*N-M方法:生成0-M~N-1-M范围内的float型随机数
  • Math类
    • 所有方法都是静态方法,不需要事先实例化对象
    • 可计算绝对值、余弦、正弦等来解决数学问题
  • 格式化输出
    • NumberFormat:含有两个方法可用于返回货币格式与百分比格式
    • DecimalFormat:模式化字符串“0.###”可用于格式化小数的输出

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

  • 问题1:包、类、对象、方法之间的关系?
    • 书本内容:Java标准类库中的类按包来组织,每个类都属于一个具体的包;一个类是生成对象依据的模型或蓝图;一旦创建了对象,就可以使用它提供的各种服务,即可以调用它的方法
    • 个人理解:简要理解就是:包 > 类 > 对象 > 方法,且基本类型值也可以“包装”为一个对象。每个类都属于一个具体的包,类作为对象的蓝图可以创建多个对象,用了对象就有了实例,可以调用具体的方法来达到应用的目的。
  • 问题2:如何理解Scanner scan = new Scanner(System.in);这句读输入语句?
    • 书本内容:要调用Scanner类的方法,必须创建一个对象。Java中的对象使用new运算符来创建。
    • 个人理解:因为要达到输入的目的,我们需要使用Scanner中的next方法,而要能调用方法我们需要先创建一个新对象。所以对此句的理解是:在Scanner类中创建一个新的scan对象,来达到调用其中next方法的目的。
  • 问题3:别名是什么?
    • 书本内容:引用变量是指向同一个对象的不同变量,互称为别名
    • 个人理解:基本数据类型赋值时,数值可能相同,但变量指向的地址还是不同的。而对象引用变量保存的是地址,当把一个变量赋值给另一个变量时,复制的变成了地址,此时两个不同变量指向了同一个地址,这就称作别名现象。

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

  • 问题1:使用DecimalFormat类时报错
    • 原因分析:DecimalFormat类定义在java.text包中,故使用时需要先声明
      23
      24
    • 解决方案:添加import声明,import java.text.DecimalFormat
      25
  • 问题2:编译生成伪随机数程序时报错
    • 原因分析:Random作为一个类名不能作为class名
      27
    • 解决方案:修改class名与文件名为Randomtest
  • 问题3:使用Scanner类时无法输入单个字符
    • 原因分析:Scanner类中的方法只有nextLine用于输入字符串而没有字符的输入方法
    • 解决方案:使用charAt(0)取出字符串的第一个字符
      28

代码托管

37


上周考试错题总结

  • 错题1:Which memory capacity is the largest? (哪个选项的存储容量最大?)
    A.1,500,000,000,000bytes(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百万字节)
    • 原因:计算错误,近似计算时误把1024当10000计算了
    • 理解情况:10T约等于10000000M字节<E
  • 错题2: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都是)
    • 原因:不理解第四代语言的含义,只看到书本上所写“Java是高级语言”
    • 理解情况:第四代语言是针对以处理过程为中心的第三代语言提出的,其原意是非过程化程序设计语言
    • 网络资料: 第四代语言
  • 错题3: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)
    • 原因:不理解publicprivate的真正含义与用途,认为只是不同的定义方法
    • 理解情况private会使程序无法被任何人执行,使得程序毫无意义
  • 错题4:Which of the following is a legal Java identifier? (下面哪个是合法的Java标识符?)
    A.i
    B.class
    C.ilikeclass!
    D.idon'tlikeclass
    E.i-like-class
    • 原因:对于保留字的知识学习不透彻
    • 理解情况:class是Java中的保留字,不能被用作标识符

用C语言类比Java促进理解

  • 举例
    • final的使用:联想C语言中的const常量,可以定义一个具体数据类型的常量。Java:final int a = 5;对比C语言:const int a = 5;
    • charAt()方法:返回指定索引处的字符,联想C语言中的数组下标。C语言中的数组下标是从0开始,所以使用charAt()方法时若想取出第一个字符,语句应为charAt(0)
      28
  • 总结:既然有过学习C语言的基础,就应该好好利用,将两种语言的异同深入分析,建立联系来帮助自己更好地学习Java。比如这两章中提到的强制转换,自增自减运算等,与C语言基本一致;比如自己编写类的过程,与C语言的构造子函数也有相似处;比如前一章学会的基本语法等,都可用C语言的程序设计思想来辅助理解。在已有知识的基础上结合自己对于新语言的理解,能做到事半功倍。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 209/209 2/2 9/9
第二周 307/516 2/4 18/28

结对及互评

点评20182320:

  • 博客中值得学习的或问题:
    • 图片排列整齐,排版精美
    • 自己积极思考,最终解决问题
    • 结尾有自己真切实际的感悟
    • 错题反思具体明确
    • 学习情况记录详细完善
  • 代码中值得学习的或问题:
    • 代码简洁明了,功能齐全却不冗长
  • 基于评分标准,我给本博客打分:19分。得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程(加1分)
    • 代码调试中的问题和解决过程(加6分)
    • 本周有效代码超过300分行的(加2分)
    • 其他加分,加8分 :
      • 排版精美(加1分)
      • 进度条中记录学习时间与改进情况(加1分)
      • 感想,体会不假大空的(加1分)
      • 结对学习情况真实可信的(加1分)
      • 代码Commit Message规范(加1分)
      • 错题学习深入(加1分)
      • 有动手写新代码(加1分)
      • 点评认真,能指出博客和代码中的问题(加1分)

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182320

    • 结对照片
      36

    • 结对学习内容

      • Scanner类读输入数据
      • Random类,String类,Math类中方法的使用
      • 格式化输出
      • 自定义类
  • 上周博客互评情况
posted @ 2019-09-22 14:31  陆彦杰  阅读(206)  评论(1编辑  收藏  举报