作业3

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

教材学习内容总结

本周学习了如何编写类和对象以及一些简单的表达式,学习编写了简单的java小程序,学会运用一些简单的java相关的类,包括String类,Math类,Scanner类等等,运用了类里面的方法,并且自己编写了一个类。

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

  • 问题1:“.”号的意义
  • 问题1解决方案:依照着教材上的代码打在虚拟机上,了解到,“.”号代表的是调用出java中一个类里面的某一个方法的意思。Math.pow(),意思是在Math这个类中调用出pow这个方法,括号代表的是向方法输入数据。

如图,图中的lastname.charAt意思是把lastname这个对象中的charAt这个方法调用出来,而这个对象属于的是String这个类。

  • 问题2:理解静态方法和非静态方法
  • 问题2解决方法:根据了解两者的生命周期不同。静态方法的生命周期跟相应的类一样长,静态方法和静态数据成员会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁。而非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。静态方法可以直接调用,类名调用和对象调用。但是非静态方法只能通过对象调用。例如Math类中的所有方法都是静态方法,这样在调用它的方法时,我们不需要再进行创建它的一个对象,可以直接使用它的方法。

而也正是因为非静态方法需要创建对象,其内部的方法都会随着对象的磨灭而被磨灭。

  • 问题3:NumberFormat对象的使用不能用new来创建,也不可以直接调用其方法。
  • 问题3解决方法:NumberFormat不能用new运算符来实例化一个对象,而且一次只能用里面一个方法来创建一个对象。根据教材中给出的例子程序,我们一次只能创建一个用于返回格式化值的对象getCurrencyInstance和getPercentInstance,接着将数字以字符串的形势用format()方法返还回去。即先设定对象的模式,再调用方法。

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

  • 问题1:
    pp3.1中返回的姓氏前五个字母只返回了4个

  • 问题1解决方案:
    错误在于最后的终止字符是不返回的,即应该在最后的数字上加1,substring(0,5)这样。最终就可以返回姓氏前的五个字母了。

  • 问题2:pp2.2运算结果不对

  • 问题2解决方案:
    观察了代码后发现,主要问题是没有搞清楚“+”号的意义,和各个运算符的优先级问题,在"the result is"后+a,会把a直接当做是一个字符串,与“the result”相连接,使得其输出一个字符串让结果不对。
    解决方法如图,应该在其计算部分加入括号,这样根据运算的优先级,就会先计算括号内的内容,从而不会发生以上的字符串拼接问题了。

代码托管

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

上周考试错题总结

  • 错题1:If two variables contain aliases of the same object then
    A.the object may be modified using either alias
    B.the object cannot be modified unless there's but a single reference to it
    C.a third alias is created if/when the object is modified
    D.the object will become an "orphan" if both variables are set to null
    E.answers A and D are correct
    如果可以选用任意别名修改对象是正确的,而如果两个对象都被设置成立null,它就不会被任何变量引用,从而被孤立,并会被垃圾收集。选E
  • 错题2:Which properties are true of String objects?
    A.Their lengths never change
    B.The shortest string has zero length
    C.Individual characters within a String may be changed using the replace method
    D.The index of the first character in a string is one
    E.Only A and B are true
    字符串的长度一旦被创建了就不能改变了,而最短字符串是“”,中间无任何字符,所以长度为零,所以这题选E,本人错选了A。
  • 错题3:Which of the following will yield a pseudorandom number in the range [ -5, +5 ) given the following:

Random gen = new Random( );
A.gen.nextFloat( ) * 5
B.gen.nextFloat( ) * 10 - 5
C.gen.nextFloat( ) * 5 - 10
D.gen.nextInt( ) * 10 - 5
E.gen.nextInt(10) - 5
nextfloat本身可以生成01.0之间的随机数,*10之后是生成010.0之间的随机数,-5之后生成了-5~5之间的随机数,所以应该选b,本人错选了C,是理解错了式子的意思,乘号后一般表示的是区间,区间后一般表示的是启示的数字。

  • 错题4:The String class' compareTo method
    A.compares two string in a case-independent manner
    B.yields true or false
    C.yields 0 if the two strings are identical
    D.returns 1 if the first string comes lexically before the second string
    E.none of the above
    本题错选了a,不区分大小写比较的是equalsignorecase方法。应该选c。

  • 错题5:The advantage(s) of the Random class' pseudo-random number generators, compared to the Math.random method, is that
    A.you may create several random number generators
    B.the generators in Random are more efficient than the one in Math.random
    C.you can generate random ints, floats, and ints within a range
    D.you can initialize and reinitialize Random generators
    E.all but answer B
    对于math.random来说,Random类的所有特性都是它的优势。

  • 上周博客互评情况

  • 本周结对学习情况

其他

java语言要求会更加的严谨,敲打代码的时候必须要注意这点,注意每一个类的大小写。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 623/1000 3/7 22/60
参考:软件工程软件的估计为什么这么难软件工程 估计方法
  • 计划学习时间:10小时

  • 实际学习时间:7小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/yangkaihan/p/11567871.html