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:在进行有输入的程序单步调试时,直接调试会出现无法识别命令。
-
问题1解决方案:仔细阅读了课代表的总结的教程,建立了一个监听的窗口,通过另一个窗口键入数值。
方法链接 -
问题2:在运行书上的程序3.1时,输入了.substring(3,30)语句时,程序报错。
-
问题2解决方案:substring是返回字符串中从第a个开始一直到第b-1个结束的字符串,而我编的程序输入的字符串没有30位所以运行时报错。
-
问题3:缩窄转换
-
问题3解决方案:将变量定义为double,同时输入时用scan.nextDouble.
-
问题4:问题2:吃回车问题(可能是吧,反正C语言是的)
-
问题4解决方案:当要输入字符或字符串时,如果前面不是字符或字符串类型的输入,那么就会出现吃回车问题,此时就多打一个op=scan.nextLine();将前者留在键盘缓冲区的回车吃掉,以便进行下一步的输入。
-
问题5:return只能返回一种类型的数据。
-
问题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。
- Integer.toString()方法
代码托管
(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分。得分情况如下:
-
正确使用Markdown语法(加1分):
-
模板中的要素齐全(加1分)
-
教材学习中的问题和解决过程(3分)
-
代码调试中的问题和解决过程(3分)
-
本周有效代码超过300分行的(加1分)
-
其他加分:
- 周五前发博客的加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小时