20182316胡泊 第2,3周学习总结

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

教材学习内容总结

第二章

  • 字符串
    • print与println区别:换行
    • 字符串连接:(字符串不能占用多行) +
    • 转义字符:
  • 变量
    • 当未给出初值就使用变量,那么在编译时会报错
    • 而c语言则是会给一个随机值,就看你能不能发现了(所以这一点还是java比较人性化)。
  • 赋值
    • 赋值只能在同数据类型之间进行。
      • 但是后面有赋值类型的数据类型转换,应该算是一个特例吧。
  • 常量
    • 命名:常常字母大写,中间用 _ 分隔
    • final int MAX_NUMBER = 435;
    • 常量在其存在期间始终保持一个值(类似于C语言的const常量吧)。
  • 数据类型
    • byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
    • short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
    • int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
    • long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
    • float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F(七位有效数字)
    • double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。(十五位有效数字)
    • boolean:只有true和false两个取值。
    • char:16位,存储Unicode码,用单引号赋值。
  • count++ 与 ++count的区别
    • count++:先执行语句,再自增。
    • ++count:先自增,再执行语句。
    • 单独写时没有区别,当放入语句中有区别。
  • 数据转换
    • 赋值转换:仅能实现加宽转换,(自动)。
    • 提升:整形除以浮点型,整形自动转化为浮点型,再进行运算。
    • 强制类型转换:result=(float) total/count;
      • 强转的优先级比除法高。
    • 布尔值不能转换为其他任意一种数据类型,反之亦然。
  • Scanner类
    • import java.util.Scanner;:在类定义之前,告诉系统要使用Scanner类。
    • Scanner scan =new Scanner(System.in);:声明创建了一个变量scan,代表一个Scanner对象。
    • message=scan.nextLine; :将下一行输入的一行文本作为字符串变量保存。

第三章

  • String +变量:变量表示的不是对象,而是对象的地址。所以可以把变量看作是一个指针。
  • 别名:两个变量同时指向同一个对象,则这两个变量互称为该对象的别名。
  • 下标(index):(类似于C语言中字符串的下标 a[0]。)
  • String类
    • .concat(""); 连接。
    • .toUpperCase();小写转为大写。
    • .replace('old','new');转换。
    • .substring(a,b);截取从第a位到第b位的字符串,返回。
  • 类库:每个类库都属于一个包,类库用包来组织
  • import声明:如果想使用类库中的类,要通过 import java.包名.类名 或者import.java.包名.*(在要用到多个类时)。
  • Random类:属于java.util包,伪随机数生成。
    import java.util.Random;
    `
    `
    Random generator = new Random();
    `
    `
    int num1;
    num1=generator.nextInt(10);//在0~9之间产生一个随机数。
    num1=generator.nextInt(20)+5;//在5~24之间产生一个随机数。
    num2=generator.nextFloat();//在0~1之间产生随机数。
    
  • printf方法
    • 为了在将已有C语言程序移植到java平台时更方便。
    • System.out.printf("ID:%5d,name:%s",id,name);
  • 枚举类型(类型安全的)
    • enum grade(类型名){A,B,C,D,E}
    • grade stu1(变量名)=grade.A;

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

  • 问题1:由int/long到float的转换明明是加宽转换,为什么会造成数据丢失?

  • 问题1解决方案:虽然由int、long到float是加宽转换,但那是因为float有小数位,而float的有效位数为7位,int与long都要远远超过这个范围,因此会有数据丢失的问题。

  • 问题2:语句:println("you entered: ""+ message + " "");

  • 问题2解决方案:

    • "you entered: "" : "表示左边的双引号,两边的“表示打印字符串。
    • +message+ :表示打印message。
    • " "" :表示打印右边的双引号
  • 问题3:compareTo(String str)的返回值如何计算。

  • 解决方案:compareTo从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型

    • 1.当两个比较的字符串是英文且长度不等时,
      • 1)长度短的与长度长的字符一样,则返回的结果是两个长度相减的值
      • 2)长度不一样且前几个字符也不一样,从第一位开始找,当找到不一样的字符时,则返回的值是这两个字符比较的值
    • 2.当两个比较的字符串是英文且长度相等时
      • 1)多个字符,第一个字符不同则直接比较第一个字符
      • 2) 多个字符,第一个字符相同则直接比较第二个字符,以此类推

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

  • 问题1:在进行有输入的程序单步调试时,直接调试会出现无法识别命令。

  • 问题1解决方案:仔细阅读了课代表的总结的教程,建立了一个监听的窗口,通过另一个窗口键入数值。
    方法链接

  • 问题2:在运行书上的程序3.1时,输入了.substring(3,30)语句时,程序报错。

  • 问题2解决方案:substring是返回字符串中从第a个开始一直到第b-1个结束的字符串,而我编的程序输入的字符串没有30位所以运行时报错。

  • 问题3:缩窄转换

  • 问题3解决方案:将变量定义为double,同时输入时用scan.nextDouble.

  • 问题4:问题2:吃回车问题(可能是吧,反正C语言是的)
    image

  • 问题4解决方案:当要输入字符或字符串时,如果前面不是字符或字符串类型的输入,那么就会出现吃回车问题,此时就多打一个op=scan.nextLine();将前者留在键盘缓冲区的回车吃掉,以便进行下一步的输入。

  • 问题5:return只能返回一种类型的数据。
    image

  • 问题5解决方法:我使用的是double来返回数据,而在程序中为了其实用性,增加了纠错,比如“can not divide 0","unrecognizeable demand"等等,针对这个问题,有两种解决方法:

    • 将返回的double型浮点数转化为字符串
    • 将报错语句换成-1,-2等数字,作为返回值返回。
  • 问题6:在将整形转换为字符串时查到了String.valueof()和Integer.toString()两个方法,有区别吗?

  • 解释:

    • Integer.toString()方法
      • 作用:该方法返回指定整数的有符号位的String对象,以10进制字符串形式返回,就好像将该整数值作为参数赋予 toString(int) 方法一样。
      • 此外,Integer.toString(a,b) :将十进制的a转换为b进制。
    • valueof()与Integer的不同:
      • 1、valueof()当输入的为null即空指针时,会返回字符串“null”,而Integer.toString则会报错。
      • 2、vlaueof()有多重用法,可以将int、float、double、boolean等等形式转化为String。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

1、 Of the following types, which one cannot store a numeric value? (在下列数据类型中,哪一个不能存储一个数值型数据?)

A .int
B .byte
C .float
D .char 正确
E .all of these can store numeric values (以上所有类型都可以存储数值型数据)
解析:char类型可以存储数字,但数字是字符型的。

2、Given the following assignment statement, which of the following answers is true regarding the order that the operators will be applied based on operator precedence?
a = (b + c) * d / e - f; (下面给定的赋值语句中,基于运算符优先级,对于将被执行操作的顺序,哪一个答案是正确的?)

A ., /, +, -
B .
, +, /, -
C .+, *, /, - 正确
D .+, /, *, -
E .+, -, *, /
解析:没有审题,以为是普通的优先级,结果是要看运算式子的。

3、What value will z have if we execute the following assignment statement?

int z = 50 / 10.00; (如果我们执行下面的赋值语句,z将得到什么值?)
A .5
B .5.0
C .50
D .10
E .none of the above, a run-time error arises because z is an int and 50 / 10.00 is not (以上皆错,因z是一个整型数而50 / 10.00不是,会产生运行时错误) 正确
解析:z是一个整型数而50 / 10.00不是,会产生运行时错误,由float转为int型时,会由于缩窄转换而报错。

4、A variable of type boolean will store either a 0 or a 1. (Boolean类型的变量将被存储为0或1)

A .true
B .false 正确
解析:在java中,boolean存储为true和false,而不是0和1。

5、As in the other members of the C family of languages (C, C++, C#), Java interprets a zero value as false and a non-zero value as true.

A .true
B .false
解析:虽然C族确实以这种方式解释了零和非零值,但是Java要求使用保留常量true和false,或者使用关系和/或逻辑运算符进行逻辑计算。

结对及互评

  • 博客中值得学习的或问题:

    • 对上周的错题进行了仔细的更正和课后复习,我对上周考试题的复习较为草率。
    • 博客撰写详细,有理有据。
    • 在撰写博客的过程中可以加入更多自己的理解。
  • 代码中值得学习的或问题:

    • 代码风格良好,便于阅读。
  • 基于评分标准,我给本博客打分:13分。得分情况如下:

  1. 正确使用Markdown语法(加1分):

  2. 模板中的要素齐全(加1分)

  3. 教材学习中的问题和解决过程(3分)

  4. 代码调试中的问题和解决过程(3分)

  5. 本周有效代码超过300分行的(加1分)

  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况

  • 学习内容

    • Scanner类读输入数据
    • Random类,String类,Math类中方法的使用
    • 格式化输出
    • 自定义类

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

  • 感觉最近打代码,比之前好了很多,对代码和文件有了更加深层的理解,能够稍微理解linux以及java的尿性了,将其与Windows上的各种操作分离开来。
  • 程序的错误有时就是很细小,当编译出现错误时,我可能通过一种或一些奇怪的方法误打误撞编译成功,甚至运行成功了,但是这些小小的问题背后可能有很多深层的知识,如果不想办法解决,就只能一知半解,所以要有探索精神。
  • 本来以为java学习基本上步入正轨,但编写类有给了我当头一棒,太难了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行
第一周 93/93 3/3 20/20
第三周 880/800 4/4 40/40
  • 计划学习时间:50小时

  • 实际学习时间:40小时

参考资料

原文地址:https://www.cnblogs.com/hp12138/p/11544635.html