王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结

时间:2021-12-09 19:21:53

王彪 2016-2017-2 《程序设计与数据结构》第5周学习总结

教材学习内容总结

  • 1.关键概念

    • 1.面向对象程序设计的核心是类的定义,它代表了状态和行为的对象。
    • 2.变量的作用域依赖于变量声明的位置,作用域决定在哪里可以使用变量。
    • 3.对象应该是封装的,以防对数据的不适合访问。
    • 4.方法的返回值类型应该与方法头中规定的返回值类型一致。
    • 5.构造方法不能有任何的返回值,即使是void也不行。
    • .......
  • 2.类定义的结构和内容,类之间的关系,构造方法的目的结构。

  • 3.类的基本编写方式

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

  • 问题1:程序5.11的理解问题
    问题描述:程序5.11是学到现在书中出现的代码量最多的程序,RationalNumber类包含了对有理数的各种操作,包括乘法和除法。这对结对编程项目-四则运算很有帮助。
    解决途径:
   public RationalNumber (int number ,int denom)
   {
   if (denom == 0)
   denom =1;
   if (denom < 0)
   {
   number = number * -1;
   denom = denom * -1;
   }
   numerator = number;
   denominator = denom;
   reduce ();
   }
  • 1.运用构造函数,if条件语句,巧妙的欲先处理了分数分母为零及为负数的情况,并将值赋给成员变量,最后调用私有方法reduce.
    private void reduce ()
    { 
    if (numerator != 0)
    {
    int common = gcd (Math.abs(numerator),denominator);

    numerator = numerator / common;
    denominator = denominator / common;
    }
    }
    //--------------------------------------------------
    // Computes and return the greatest commom divisor of the two
    //--------------------------------------------------
    private int gcd (int num1,int num2)
    {
    while (num1 != num2)
    if (num1 > num2)
    num1 = num1 - num2;
    else
    num2 = num2 - num1;
    return num1;
    }
    }
  • 2.reduce方法引用了gcd方法,这是利用逐差法求分数的最大公约数,并化简为最简形式。
        public RationalNumber multiply (RationalNumber op2)
    {
        int numer = numerator * op2.getNumerator();
        int denom = denominator * op2.getDenominator();

        //int numerator2 = op2.getNumerator() * denominator;
        //int difference = numerator1 - numerator2;
        //return new RationalNumber (difference, commomDenominator);

        return new  RationalNumber (numer , denom);
    }

    public RationalNumber divide (RationalNumber op2)
    {
        return multiply (op2.reciprocal());
    }
  • 3.有关除法运算,首先调用reciprocal方法将分子分母调换便于计算,再引用multiply方法,而multiply间接调用reduce来化简。
  • 问题2:关于toString方法
    详述:在第七章中就见到过toSting方法,在第五章中出现多次,于是仔细了解了一番
    在将对象传递给print或println方法时,以及将一个对象与一个字符串链接是,都会自动调用对象的toString方法。

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

  • 问题1:误在构造方法中打入return.
    王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结
    解决过程:构造方法没有返回类型(甚至没有void),所以它不能返回任何值。
    补充:对返回值的概念有点模糊,论坛,里面有很形象的比喻

    • 1.为什么要用到返回值呢?比如说你想要开门,可以将返回值比作一把钥匙,你就可以开门,没有return就不能开门
    • 2.返回值就像你工作辞职的时候 你得递交辞职信 但是老板看不看就不知道了
      王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结

代码托管

王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结

上周考试错题总结

  • An array cannot hold object types.(数组中不能包含对象类型)(错误)
    数组可以保存任何的基本类型或任何对象类型。保存在数组中的值有时称为数组元素,保存的值的类型称为数组的元素类型。
  • Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)

       int[] array = new int[25];
       array[25] = 2;
    This code will result in a run-time error. (代码会产生运行时错误)
    在Java中许多运行时错误称为异常exception,编译程序进行检查,知识查看是否有语法错误。
  • An infinite loop is not a compile-time error.(无限循环不会产生编译时错误)
    无限循环的语法无错误。
  • A while statement always executes its loop body at least once.(while语句的循环体至少会执行一次)
    while循环在布尔表达式为真是重复执行指定的语句。首先要计算表达式的值,所以有可能一次都不执行对应的语句。
  • The ___________________ statement causes execution of a loop to stop, and the statement following the loop to be subsequently executed.(_________ 语句会导致退出循环,然后顺序执行循环后面的语句)
    break语句对循环的影响类似在switch语句中,即终止循环的执行,转去执行循环之后的语句,continue语句类似break,但会再次计算循环条件,如果仍为真,则再次执行循环体。

    结对及互评

  • 上周博客互评情况
    • 20162327王旌含
    • 四则运算深度思考学习,在上周基础上根据本周内容优化代码(上周的思路很幼稚,还有待改进)
  • 上周博客互评情况

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

这章的学习并配合视频的学习让我对对象和类的概念有了很好的理解,第七章的不解也有所改变,类的学习,让我在结对编程项目中有了更好的思路,现在回想起当时的...感觉就在菜鸡互啄,很尴尬,虽然现在看来当时有点搞笑,但也很佩服自己,至少能想到是不?

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 070/200 1/2 20/20
第二周 300/500 2/4 30/38
第三周 620/1000 3/7 51/60
第四周 1200/200 5/9 80/90
第五周 1500/500 6/11 00/120
第六周 000/1000 0/11 00/120
第七周 000/1300 0/13 00/120

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

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

参考资料