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

Posted amberr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172324 2017-2018-2 《程序设计与数据结构》第七周学习总结相关的知识,希望对你有一定的参考价值。

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

教材学习内容总结

  • 编写类是定义一组类似的对象;类建立了对象的特征和行为,但没有位声明的变量预留内存空间(除非所声明的变量是静态的)
  • 继承是从现有类派生新类的过程,并且是一种强有力的软件开发技术。
  • super可用来访问构造方法。父类的构造方法不能直接按名字调用,但可用super引用调用父类的构造方法。
  • 当子类和父类有相同的方法名时,子类方法将重写父类方法,子类方法优先。但是子类不能重写final方法。
  • 子类不可以重写父类的构造方法。因为构造方法没有返回类型。如果试图重写父类的构造方法,将会产生语法错误

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

  • 问题1:这是一个上周的问题,pp8.10中

    public class c810
    {
    public static void main(String[] args) {
        System.out.println();
        System.out.println("       "+args[0]);
        System.out.println("My name is "+args[1]);
    }
    }
    在VMware和idea中的运行方法?
  • 问题1解决方案:在VMware中是在编译之后运行的时候文件名后面加上要输入的字符。技术分享图片

在idea中是点开run,然后在Edit Configurations中输入参数。

  • 问题2:继承是支持软件复用的途径之一,那么软件复用有哪些途径?
  • 问题2解决方案:软件复用有三个层次:知识的复用、方法的复用和软件成分的复用,前两个属于知识工程的范畴,这里只讨论软件成分的复用。软件成分的复用包括
    (1)代码的复用,可以采用源代码剪贴、源代码包含和继承来实现。(2)设计结果的复用,是指复用某个软件系统的设计模型,适用于软件系统的移植。(3)分析结果的复用,是指复用某个软件系统的分析模型,适用于用户需求未改变,而系统体系结构变化的场合。
  • 问题3:子类为什么不可以重写其父类中的构造方法?
  • 问题3解决方案:构造方法是一个特殊的方法,与类名相同,但是没有返回类型。如果都试图重写父类的构造方法,将会产生语法错误,因为除了构造方法以外的所有方法都必须有返回类型。
  • 问题4:super引用的用法。
  • 问题4解决方案:(在结对同学的博客里引用的)

    第一种
    super.xxx(xxx为变量名或对象名)
    这种方法意义为,获取父类中的名字为xxx的变量或方法引用。
    使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作

    第二种
    super.xxx()(xxx为方法名)
    这种方法意义为,直接访问并调用父类中的方法。

    第三种
    super()这种方法意义为,调用父类的初始化方法,其实就是调用父类中的public xxx()方法;

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

  • 问题1:上周的pp8.6中我编写出来会报一个
    java.lang.NullPointerException的错误,原因?

  • 问题1解决方案:出现java.lang.NullPointerException错误提示的原因是接口类型的对象没有用具体的类初始化。最后用一个new实例化就能解决问题了。
  • 问题2:课后习题9.1中如何表示硬币面值。
  • 问题2解决方案:有三种想法,一种时scanner任意面值,一种是创建一个有规定面值的数组,第三种似乎才是正确简单方法...就是heads就是0,另外一面就是1,这样似乎才对。(我现在知道这样不对了,因为一个硬币不管正反都是一个固定面值的...补写一个

public class MonetaryCoin extends Coin {
int [] num ={1,5,10,20,50,100};
int i,nu,sum=0 ;

public MonetaryCoin (){
super.flip() ;
}
public void flip(){
i = (int)(Math .random()*6 );
}
public int Monetaryreturn(){
nu = num [i];
return nu ;
}
public int Monetarysum(){
nu = num [i];
i ++;
sum += nu ;
return sum;

}
}

)而在其中书上要求用继承其父类的抛硬币功能。我开始只用了super(flip)引用flip方法,但这样还需要引用其他的变量,后来经过同学点醒直接用super()就应用Coin类的所有变量和函数。

代码托管

技术分享图片

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

上周考试错题总结

  1. In Java, arrays are
    A . primitive data types
    B . objects
    C . interfaces
    D . primitive data types if the type stored in the array is a primitive data type and objects if the type stored in the array is an object
    E . Strings
    在 Java 中, 数组作为对象实现。该变量是存储整个数组的内存块的引用变量。但是, 数组是使用表示法名称 [index] 访问的, 而不是通过消息传递。

  1. The "off-by-one" error associated with arrays arises because
    A . the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far
    B . the last array index is at length + 1 and loops may only iterate to length, missing one
    C . the last array element ends at length - 1 and loops may go one too far
    D . programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length
    E . none of the above, the "off-by-one" error has nothing to do with arrays
    数组初始化为 = 新类型 [x], 其中 x 是数组的大小。但是, 数组的法律索引为0到 x-1

  1. Given the following declarations, which of the following variables are arrays?
    int[ ] a, b;
    int c, d[ ];
    A . a
    B . a and b
    C . a and d
    D . a, b and d
    E . a, b, c and d
    第一个声明声明了 a 和 b 为 int 数组。第二个声明声明 c 和 d 是整数, 但在 d, 一个 int 数组的情况下。所以, a、b 和 d 都是 int 数组。

  1. If a and b are both int arrays, then a = b; will
    A . create an alias
    B . copy all elements of b into a
    C . copy the 0th element of b into the 0th element of a
    D . return true if each corresponding element of b is equal to each corresponding element of a (that is, a[0] is equal to b[0], a[1] is equal to b[1] and so forth) and return false otherwise
    E . return true if a and b are aliases and return false otherwise
    "=" 是赋值运算符。如果两个变量都是基元, 则比左变量获取右变量的副本 (因此, 如果 a 和 b 是 int 值和 b = 5, 则 a 将变为 5)。但是, 由于 a 和 b 是数组, 引用变量 a 被设置为引用变量 b, 导致 a 和 b 引用内存中的同一数组, 或者它们现在是彼此的别名。这个地方可以参考书上例8.8中temp数组和collection数组的赋值。

  1. A Java main method uses the parameter (String[ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.
    A . true
    B . false
    程序员希望允许用户提供命令行参数时, main 方法需要参数。然后, 在 java 命令行之后输入的任何内容将被接受为命令行参数。如果是由空格分隔的几个单词, 则每个单词都存储为单独的字符串数组元素。例如, "java foo" 类喜在变量 [0] 和 "那里" 将存储 "hi" 在变量 [1] 为可能的用途。

  1. In Java, an array can only store one type of data. For instance, you cannot create an array that stores both double and String values.
    A . true
    B . false
    数组称为齐次类型。这意味着数组中存储的值类型必须与每个元素相同。该类型由声明确定。因此, int [] x 只使 x 成为 int 值的数组。因此, 任何数组都不能存储双打和字符串。

  1. So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It‘s only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.
    A . true
    B . false
    ArrayLists 是作为数组实现的, 因此, 只要一个只访问 ArrayList 的元素, 效率就与数组相同。但是, 当对 ArrayList 的前半部分进行插入或删除时, 即当大量的元素复制必须发生时降低其效率。

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • 教材学习内容总结得很到位
    • super引用解决了我的疑问欸!可以说是非常及时了,我要去引用解决我的问题了。
    • super中形参与实参应该一一对应。
    • 开学两个月了...我看了你的学习进度条才理解这个学习进度条的意义...
  • 代码中值得学习的或问题:
    • pp9.3我觉得你弄复杂了,我在最高层的包里定义了所有变量和函数,第二层的包一个super()就可以了欸...

      public class readtexts extends readmaterial {
      public readtexts(String name, int pages, String keywords) {
      super(name, pages, keywords);
      }
      }
    • 硬币的面值不应该只是0和1...虽然我也是这样编的,应该创建一个数组把数据放在数组里,比如1分5角1元。

  • 基于评分标准,我给本博客打分:14 。得分情况如下:
  1. 正确使用Markdown语法(加1分)
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 加4分
  4. 代码调试中的问题和解决过程, 加4分
  5. 本周有效代码超过300分行,加2分
  6. 其他加分,加2分
  • 排版精美的加一分
  • 进度条中记录学习时间与改进情况的加1分

点评过的同学博客和代码

  • 本周结对学习情况
    • 21号
    • 结对学习内容
      • 实验四的讨论,发现实验4都有共同的问题在getR哪里。果然是搭档...不会的都一样。

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

程序设计越学到后面会发现前面的东西越来越重要,如果基础没有打好,知识点与知识点间就会出现

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/2 20/20
第二周 329/500 2/3 18/38
第三周 619/1000 2/5 22/60
第四周 817/1734 2/7 38/98
第五周 674/2408 1/9 30/128
第六周 1136/2870 2/10 30/158
第七周 1000/3791 1/11 32/190

参考资料

以上是关于20172324 2017-2018-2 《程序设计与数据结构》第七周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-2学期 20172324《Java程序设计》第六周学习总结

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

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

20172324《Java程序设计》第二周学习总结

20172324《程序设计与数据结构》第一周学习总结

20172324《程序设计与数据结构》第四周学习总结