第四周总结

目录

  • 学号 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
    • 教材学习内容总结
    • 代码调试中的问题和解决过程
    • 代码托管
    • 上周考试错题总结
    • 其他(感悟、思考等,可选)
    • 参考资料

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

教材学习内容总结

  • 学习4.8节迭代器与for的利用,正确理解迭代器的作用,并编写代码。
  • 正确理解类和对象,并尝试编写简单的类和对象,编写主程序,并运行。
  • 学习类的封装和刨析,学习静态类和public类等,明白类之间的关系、方法设计、方法重载。
  • 练习测试,学会是会用TDD,善于利用idea来打代码。

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

  • 问题1:构造方法应该如何理解?
  • 问题1解决方法:根据代码实践和对教材的解析,我们了解到一个类里都需要一个构造方法,构造方法的意义相当于是创作这一个类的意思

第四周总结_第1张图片

第四周总结_第2张图片

如上图的cat类,假设我们是上帝的话,那么我们创造一个叫做猫的类,在类里有各种各样颜色的猫,那么在编写每种颜色的猫的时候,我们就必须要先“创造猫这么一个类”,这样才能编写类的内容。

  • 问题2:对象与类有什么不同?
  • 问题2解决方法:根据书上所说,将类比喻成一张房屋的设计图纸,而对象是每张图纸制作之后的一栋房子,对象具有类的特征和方法。本人理解认为,类更像是一个工具箱的说明书,里面有许多的工具方法可以给我们使用,而创建一个对象,即是创作一个工具箱,然后我们利用这个工具里的方法工具去解决问题,这就是我认为的类与对象的问题。
  • 问题3:什么是接口?
  • 问题3解决方法:
    第四周总结_第3张图片

我认为,接口更像是许多个类都共用它的几个方法,从而有利于分清类与类之间的关系,下面我们举出几个代码的例子来说明

package com.company;

public interface people {
    public void hair ();
    public void laungrage();
    public void eyes();
}

这是我们打的people类,里面的方法描述了人的几个特性,头发颜色、说的语言、还有眼睛的颜色,它就是一个借口,接着我们打两个类,一个china,一个European

import com.company.people;

public class European implements people
{


    @Override
    public void hair() {
        System.out.println("欧美人的头发是金色的");
    }

    @Override
    public void laungrage() {
        System.out.println("欧美人的语言是英语");
    }

    @Override
    public void eyes() {
        System.out.println("欧美人的眼睛是蓝色的");

    }
}
package com.company;

public class china  implements people{


    @Override
    public void hair() {
        System.out.println("中国人的头发是黑色的");
    }

    @Override
    public void laungrage() {
        System.out.println("中国人的语言是中文");

    }

    @Override
    public void eyes() {
        System.out.println("中国人的眼睛是黑色的");

    }
}

接着,我们在编写主函数

package com.company;

public class Main {
    public static void main(String[] args) {
        // write your code here
        china yang = new china();
        yang.eyes();
        System.out.println(yang);
        yang.hair();
        System.out.println(yang);
        yang.laungrage();

    }
}

运行结果如下显示

"D:\idea\IntelliJ IDEA Community Edition 2019.2.2\jbr\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA Community Edition 2019.2.2\lib\idea_rt.jar=63386:D:\idea\IntelliJ IDEA Community Edition 2019.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\idea\IdeaProjects\untitled5\out\production\untitled5 com.company.Main
中国人的眼睛是黑色的
com.company.china@7ef20235
中国人的头发是黑色的
com.company.china@7ef20235
中国人的语言是中文

Process finished with exit code 0

在这里,我们可以看到,china和European两个类的借口都是people,而我们想要调出他们两个的数据的话,直接找people就好了,他们都共用people里的方法,至少我是这么理解的,这样有助于我们对类进行分类,不会因为过多的类而被搞晕。

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

  • 问题1:
    错误代码如下
    第四周总结_第4张图片

  • 问题1解决方法:

当我们的运行出现错误的时候,idea都会给出相应的提示,我们应该善于利用idea这一特性。通过检查,发现diea里说的是“Error:(10, 18) java: flip() 在 com.company.coin 中是 private 访问控制”,即在coin文件第10行,18个中出现了问题,我们打开文件发现,主要原因是flip代码打成了private型的函数,这就让flip函数变成了一个private的私有方法,我们无法在主函数进行访问,所以将其开成public就好

借此顺便学习一遍类中的私有和公有的问题,public开头所定义的方法和变量都属于公有变量,这代表是外面的程序是可以直接访问的

package com.company;

public class coin {

   enum face {tails , heads}
   face time;
   private int h;
   public  int a;
    private String Heads = "heads";
    public coin() {
        flip ();
    }

    public void flip() {
        h = (int) (Math.random()*2);
     if (h == 1)
     {
         time = face.tails;
     }
     else
     {
         time = face.heads;
     }

    }
    public boolean isHeads ()
    {
        return ( time.name()== Heads);
    }

    @Override
    public String toString() {
        return (time.name() == Heads) ? "Heads" : "Tails";
    }
}

在这个coin类中,public所代表的方法是可以直接使用的,使用的方法是创造一个对象,并用“.”号来调取方法来使用,包括前面的int a也是可以直接调用的,而private定义的变量则不可以,他们只能通过public类来间接的接受我们程序的修改和访问。

  • 问题 2:错误代码如下

第四周总结_第5张图片

  • 问题2解决方法:这是一个对方法运用不够成熟所犯下的错误,在调用方法的时候,我错把a1.setx当成了一个变量,使得运行出现了错误,正确的方式应该是在括号内输入我们要输入进方法里的值,()才是方法的的入口。

第四周总结_第6张图片

  • 问题3:错误代码如下

第四周总结_第7张图片

  • 问题3解决方法:当我运行代码的时候,我发现底下结果都是一排的黑桃,我便知道这段代码肯定出现了问题,对比前面打的coin的类,我发现我与那段代码的区别是在于math.random这里少了一个括号,使得我的代码出现了运行错误。
    这就是我不小心忘记了在java里同样有运算优先级的问题

第四周总结_第8张图片

只需要在Math这里加入()就可以解决问题了,如

第四周总结_第9张图片

问题4:通过pp5.3探讨枚举类型的用法(因对枚举类型的不熟悉,开始时不懂如何编写这道题)
问题4解决方法:
按照书上的解释,我们编写了这样的代码

package com.company;

public class coin {

   enum face {tails , heads}
   face time;
   private int h;
    private String Heads = "heads";
    public coin() {
        flip ();
    }

    public void flip() {
        h = (int) (Math.random()*2);
     if (h == 1)
     {
         time = face.tails;
     }
     else
     {
         time = face.heads;
     }

    }
    public boolean isHeads ()
    {
        return ( time.name()== Heads);
    }

    @Override
    public String toString() {
        return (time.name() == Heads) ? "Heads" : "Tails";
    }
}

{}里的tails和heads是枚举类型的两个值,使用这两个值的时候,只需要定义一个face型的变量time,然后用“.”号对其进行调用就好,枚举类型里的每一个值,是一个特殊的“值”,或者更像是一个类,因为这些值里都有自己的方法,如time.name返回的是time这个值的字符串名称。

第四周总结_第10张图片

(上图说明season.hellp不是一个字符串类型的数据)
正确理解枚举类型里面值的含义,有利于我们将来对枚举类型的使用。

代码托管

第四周总结_第11张图片

(statistics.sh脚本的运行结果截图)
此图是在windows上的git软件上所运行的脚本截图

上周考试错题总结

错题1:Which of the following is an example of multiple inheritance?
A.A computer can be a mainframe or a PC
B.A PC can be a desktop or a laptop
C.A laptop is both a PC and a portable device
D.A portable device is a lightweight device
E.Macintosh and IBM PC are both types of PCs

错题1解析:多重继承意味着给定的类继承自多个父类。在上面列出的那些便携式计算机中,便携式计算机从PC和便携式设备继承属性。A,B和E中的答案都是单继承的示例,D表示类的属性。

错题2:Which of the following is not a method of the Object class?
A.clone
B.compareTo
C.equals
D.toString
E.all of the above are methods of the Object class

错题2解答:Object类定义clone来创建任何对象的副本,等于确定两个对象是否是同一对象,以及toString来将Object转换为String。但是,compareTo不是由Object实现的,必须在要实现Comparable接口的任何类中显式实现。

错题3:Two children of the same parent class are known as
A.aliases
B.relatives
C.clones
D.brothers
E.siblings

错题3解答:这题选e,选错的主要原因是没有好好看书,搞清概念。

错题4:The relationship between a parent class and a child class is referred to as a(n) ________ relationship.
A.has-a
B.is-a
C.was-a
D.instance-of
E.alias

错题4解决方法:has-a关系是指类的属性或元素(例如,学生拥有GPA),instance-of是指类与该类的实例化对象之间的关系,而was-a关系根本不存在,所以我们选b。

  • 上周博客互评情况
    • 20182334

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

  • 对于新的概念,必须要全面了解(如枚举),必须要深入大致了解,否则不宜与对于java编程的学习。
  • 正确使用tdd来测试研究程序相当的重要
  • 学会使用idea来解决许多编写java时出现的小问题,粗心的问题,来提高自己的编码效率

    学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 623/1000 3/7 22/60
第四周 600/1600 2/9 30/90

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

  • 计划学习时间:8小时

  • 实际学习时间:8小时

  • 改进情况:

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

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java程序设计与数据结构教程(第二版)》学习指导
  • ...

    第四周总结_第12张图片

你可能感兴趣的:(第四周总结)