20172305 2017-2018-2 《程序设计与数据结构》第三周学习总结

20172305 2017-2018-2 《程序设计与数据结构》第三周学习总结

教材学习内容总结

本周内容主要为书的3.1-3.8的内容:
1.String类、Random类、Math类、两种格式化输出NumberFormat类和DecimalFormat类、枚举型以及包装器类
2.Java API标准类库
3.import声明简化类的引用
4.对象变量保存的是该对象的地址

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

  • 问题1:对于Random类中输出随机数的取值范围
  • 问题1解决方案:选取的范围通常为左闭右开,而且左区间的值为0或者0.0,而整型的右侧一般为取到的最大值的减1,而浮点型的右侧为1,只能输出(0.0,1.0)之间的范围,如果是取其他的范围,只能通过乘法的扩大倍数或者是加减移动范围。
  • 问题2: Math类的正余弦值的运算
  • 问题2解决方案:对于书上所说的“static double cos(double angle)”中的angle是弧度值,而我在进行PP3_8的实验做出来的随机数的正余弦,与我手机计算器运算的数有很大差别,而且整个程序没有问题。耗时半天进行解决,反复调试,才发现自己的代码执行的是弧度值,手机执行的是角度值,针对角度值的运算只能通过弧度制与角度值的换算公式1=180度/π进行运算。
  • 问题3:Math中的各种方法
  • 问题3的解决办法:Math.PI为圆的周长与直径之比,即为π,无限不循环小数,比自己用3.14要精确多了,Math.log是运算对数函数的,JDK API对于自己查询方法有很大的的帮助。

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

  • 问题1:格式化输出中NumberFormat类和DecimalFormat类

  • 问题1解决方案:(1)针对NumberFormat类的例题3.4书中的输出是美元符而不是人民币的符号,而自己输出的是人民币符号,这个是如何区分本地的问题,很有意思。我认应该是当初设置系统的时候选择了上海的地区,所以分为了人民币。
    (2)针对DecimalFormat类的“#”和“0”的区别,试了好几次,并且每次运用的“#”和“0”的长度也不同,其中“#”的作用表示该位无数字则自动省略,“0”表示该位无数字则补零。两种都要进行四舍五入,进行保留。而且书中的例题很有意思,其中的“The circle's area:78.5398”在格式化为“0.####”如果为“0.###”的时候,8进位,9变10结果应该为78.530,但由于“#”的作用使得末尾的0去掉了。

  • 问题2:对于import声明类的过程,对于多种类的声明方法

  • 问题2解决方案:针对同种包中的类可以用“*”全部代替。

  • 问题3:char类型与String类型的转换

  • 问题3解决方案:char和String的区别:

    (1)类型不同,char是字符类型, String是字符串类型(2)String字符串是用""来包含串的, char是用''来包含单字符的(3)String内部用来存储的结果是一个char字符数组。
    我所敲的代码忽略了字符与字符串的问题,所以出现问题提示,用强制转换的方式可以解决,String s = String.valueOf('c')。

代码托管

上周考试错题总结

  • 错题1What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我们执行下面的赋值语句,得到的z将会是什么值?)z will equal 0.0 (z将等于0.0)
  • 错误分析: 这道题完全就是选错选项造成的,两个整型数做除法仍为整型数,在由该整型数变为浮点数。
  • 错题2.Which of the following is true regarding the mod operator, %? (关于求余运算符%,下面哪项是正确的?)It can be performed on any numeric values, and the result always is numeric (它可以执行任何类型的数值,其结果始终是数值)
  • 错误分析: 做此题之前,一直认为求余运算只能是整型的,通过此题认识到执行任何类型的数值都是可以的。这道题算是自己学习缺陷的弥补,下次看书的时候会更认真。
  • 错题3. What is output with the statement System.out.println(x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(x+y);的输出是什么?)15
  • 错误分析: 混淆字符串和数字的区别了,对于两侧加双引号状态下数字成为字符串,在未加状态下,括号将“+”运算符与两个数值操作对象组织在一起,则首先进行加法运算的,然后在输出。
  • 错题4. If you want to store into the String name the value "George Bush", you would do which statement? (如果你想把"George Bush"这个值存储为字符串类型的名字,你会执行那条语句?)
    String name = "George Bush";
    String name = new String("George Bush");
    String name = "George" + " " + "Bush";
    String name = new String("George" + " " + "Bush");
  • 错误分析: 有两种方法可以将字符串存储为字符串变量,通过使用“new string (string value)”构造一个新字符串,或者使用赋值语句。因此前两个是对的,而后两个用上使用了字符串连接操作符“+”也是对的。该题一直不确定选哪个,是由于自己没有提前看书造成的,因此好好看书成为重中之重,而且要确定好每个选项,不能因为一个“E”选项影响。
  • 错题5. Java is a strongly typed language. What is meant by "strongly typed"? (Java是一种强类型语言。“强类型”指的是什么?)Every variable has a single type associated with it throughout its existence in the program, and the variable can only store values of that type (在程序中,每个变量都有一个与之关联的类型,而变量只能存储该类型的值)
  • 错误分析: 变量是自己定义类型的,但变量的存在期间,变量的类型不会发生变化,而存储在该变量中的任何值都属于该类型。强大的输入是重要的,因为它保证了一个成功编译的程序不会出现与被声明的变量的错误类型相关联的运行时错误。
  • 错题6.A double is wider than a float and a float is wider than an int. (一个double类型的数比float类型的数更宽泛,一个float类型的数比一个int类型的数更宽泛。)true
  • 错误分析:double是64位,而float是32位,而float,因为它的存储方式是浮点型的,可以存储比int更大的值范围。后半部分的内容是自己在做题是忘记考虑,选错的。同位存储类型的整型和浮点型,浮点型的存储比整型的存储大。
  • 错题7.A variable of type boolean will store either a 0 or a 1. (Boolean类型的变量将被存储为0或1)false
  • 错误分析: 布尔变量只能存储两个值中的一个,但这些值是保留字true和false。在C语言中,c++和c#布尔值被实现为只存储0或1的int变量,但是在Java中,语言的作者选择了真实和错误的布尔文字,因为这被认为是语义上更容易理解的(而且更安全)。由于上学期老师说过黑白图片的存储是由0和1的形式存储的,就选错了,实际上那种是C语言的存储方式,而本题说的是JAVA语言。
  • 错题8.Consider the following statement:
    System.out.println("1 big bad wolf\t8 the 3 little pigs\n4 dinner\r2night");
    This statement will output ________ lines of text (思考下面的语句,该语句将输出___行文本)2
  • 错题分析: \t转义序列插入一个选项卡,但将光标放在同一行。\n的转义序列导致产生一个新行,以便“4晚餐”在下一行输出。转义序列\r使回车返回(也就是说,光标移回到左边缘),但是因为它没有开始新的行,“2night”输出超过“4 dinn”,导致第二行看起来像“2nighter”。
  • 本周的错题相对简单,总结起来自己的成绩为何这么低,原因在于自己没有好好看书,没有细致的看书上的重点句子造成的,同时自己学习进度也要提前,才能防止本次错题中的失误。在看书的同时也要多在网页上进行相关知识的查找才能极大的拓宽我们的视野。

感悟

 本周在虚拟机上的敲代码变得顺利许多,无非就是自己的代码有问题之类的错误出现,没有以前的那些稀奇古怪的问题出现。但,本周运行的Idea倒是遇到了不少麻烦,幸得老师、学长和同学的帮助,才得以解决。像什么与码云的连接问题,在Idea上把文件传到码云上,还有更为无奈的是这个好像只有一个月的试用期,只能模仿同学,在淘宝上开了个帐号进行应用。还有本周一遇到了~~毁天灭地~~的大事,就是虚拟机在软件更新过程中的失败,造成虚拟机的坏掉图形界面显示不出来,一直处于无程序的界面(还不如直接黑屏来的干脆,看着自己好不容易弄出来的虚拟机就是不运行,真想把电脑砸了)值能求助老师,在老师的帮助下,开始恢复图形界面。但是,很不幸的是自己把语言模式设置成汉语,造成大部分的内容显示不出来,用一个个的菱形替代,完全不知菱形背后的是什么。快气炸了,没法解决只能自己重新安装了,好在自己还有安装步骤,花费了一节公选课的时间,重新装完vmwaretools、gdk、vim、tree等东西,将近一个半小时的是间就搞定了,应了那个成语“熟能生巧”(为自己的错误买单)如果有下次的话,我相信指定会比这次安装的更顺利。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 136/200 1/2 15/20
第二周 570/500 1/4 20/38
第三周 613 /1000 1/7 23/60 习惯了,也就不感觉敲代码很累了。

参考资料

posted @ 2018-03-24 12:13  三金哥  阅读(179)  评论(3编辑  收藏  举报