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

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

教材学习内容总结

1.数组及其的声明和使用

  • 数组用于分组和组织数据。
  • 数组索引总是从0开始的,其原因是尽可能地使元素地址的计算更简单容易。
  • 元素地址计算方法:元素的索引值×每个元素所占字节数+数组起始地址。
  • 创建数组必须声明引用变量,数组可以保持任何基本类型的数据或对象。
  • 在所有java运算符中,“[]”有最高的优先级。
  • 声明方式有两种:int[] 名称和int 名称[]。两种声明方式是等价的,但一般使用第一种。
  • 数组中还可以使用一个初始值表实例化一个数组对象。
    • 例:int[] class23 = {01, 02, 03, 04, ... ,33}

2.边界检查

  • 边界检查保证引用一个数组元素的索引值在有效范围内。
  • 检查边界错误的常用方法是使用length常量。
    • 例:有一个有10个元素的数组A,则A.length的值为10,其最大索引值为9

3.对象数组

  • 一个对象数组其实是一个对象引用数组。
  • 实例化对象数组是为保存对象引用预留空间,对每个数组元素所代表的对象仍需要分别实例化。

4.命令行实参

  • 我们从第一章开始经常敲的那个String[] 叫命令行形参_(:з」∠) _
  • 命令行实参储存在String对象的数组中,并将其传递给main方法。

5.可变长度参数表

  • 格式:类名(参数类型 ... 数组名称)省略号代表该方法接受的参数个数可变。
  • 可变参数必须写在形参表的最后。

6.二维数组和高维数组

  • 二维数组中有两个索引值,一个指定行,一个指定列。
  • 高维数组又称不规则数组。一般用于在多个层次上管理大量数据。

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

  • 问题1:不是很理解“差1错误”究竟指什么
  • 问题1解决方案:通过查资料知道了它是一个“在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误”,是一种逻辑错误。简而言之就是程序员在编写程序的时候自己想错了。我刚开始把它想得复杂了,以为它是一个计算机运行时会产生的运行错误
  • 问题2:不知道例8.3中那一句upper[current-'A']++究竟是什么加一
  • 问题2解决方案:在问了学长之后知道了[current-'A']是先到达预定的索引值,然后将索引值所对应的数组元素加一。
  • 问题3:类/对象/变量/参数的含义?区别?联系?
  • 问题3解决方法:刚学的时候还很清楚但感觉学的越多越糊...翻书翻了很久顺便查了很多资料总结了一下。
    • 类:类是组成java程序的基本要素,它封装了一类对象的属性和方法。
    • 对象:类是创建对象的模板,当使用一个类创建了一个对象时,也就是说给出了这个类的一个实例。
    • 变量:区别于常量的一种可变数据。java中的三大变量是静态变量、实例变量和局部变量。局部变量就是本地变量,在方法、构造器或者块中使用,在方法、构造器或者块进入时被创建。实例变量在类中声明,但是它在方法、构造器之外。静态变量在类中用static关键字声明,但是它在方法、构造器或者块之外。
    • 参数:参数分两种,一种叫形参,一种叫实参。在方法名后面括号里面用逗号分开的就是形参。当方法没有参数时,如果想要使用这个方法的话必须在调用这个方法时给它传递形参的实际值(这就是实参)
    • 联系:在网上找到一篇博客,大概总结了一下见下图:

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

  • 问题1:在修改PP5.3之后,IDEA上git push失败,显示让merge(合并),
    合并之后目录有些变化,

    但仍然不能git push把代码复制到虚拟机上进行git push,显示“更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更”
  • 问题1解决方案:首先这个时候我干了一件很蠢的事情就是直接把码云上的PP53.java给删了,之后多次尝试git push全部失败(╥╯^╰╥)本来准备周一去问王老师的,想起上回自己什么都没有干直接就去问被老师说是“伸手党”就决定先自己试着解决,崩了再找老师_(:з」∠)_ 结果在网上真的找到了类似的问题解答。按着其中给的方法先git pull然后merge最后再apply成功解决了问题,不过在查到的教程中问题在这里并没有解决,可能是一个比我的更复杂的问题吧 _ (:з」∠)_
  • 问题2:运行PP8.5时标准方差死活输出不了正确值
  • 问题2解决方法:第一遍检查之后发现h = Math.sqrt(i);一句应该放在{}之外,但改掉之后输出结果还是错的。最后采用了分步调试的方法,发现是for循环的三元运算符中的布尔表达式设定出了问题,我刚开始设定的是e <= n,意思就是当调用到索引值为n的数组元素结束循环,但实际上我的数组中只有n-1个数组元素,所以当n=e=3时,程序就发生了错误。但我还是不清楚为什么我尝试的1,2,3的标准方差在错误的时候会输出√6而不是其他数字。(在周一上完课明白了,老师说当索引值所对应的数组元素是空的时,将会随机输出某个数。)
    修改前

    修改后

    分步调试中的错误

代码托管

上周考试错题总结(正确为绿色,错误为红色)

  • 错题1:The idea that program instructions execute in order (linearly) unless otherwise specified through a conditional statement is known as
    • A . boolean execution
    • B . conditional statements
    • C . try and catch
    • D . sequentiality
    • E . flow of control
  • 原因及理解情况:这句话的原文在书上P133,原文说的是“除非特别指定,否则程序中的语句会按线性方式顺序地执行。”刚看这道题的时候感觉没有正确答案,感觉D的意思和线性方式比较相近就选了E。
  • 错题2:Which of the sets of statements below will add 1 to x if x is positive and subtract 1 from x if x is negative but leave x alone if x is 0?
    • A . if (x > 0) x++;
      else x--;
    • B . if (x > 0) x++;
      else if (x < 0) x--;
    • C . if (x > 0) x++;
      if (x < 0) x--;
      else x = 0;
    • D . if (x == 0) x = 0;
      else x++;
      x--;
    • E . x++;
      x--;
  • 原因及理解情况:C的情况中,第二个if不论什么情况下都会执行,所以当x是正数时,最后输出的会是0.
  • 错题3:If x is an int where x = 1, what will x be after the following loop terminates?
    while (x < 100)
    x *= 2;
    • A . 2
    • B . 64
    • C . 100
    • D . 128
    • E . none of the above, this is an infinite loop
  • 原因及理解情况:当x=64时,它仍然满足布尔表达式,所以还会执行一次,x=128,,不满足布尔表达式,输出。
  • 错题4:Which of the following are true statements about check boxes?
    • A . they may be checked or unchecked
    • B . radio buttons are a special kind of check boxes
    • C . they are Java components
    • D . you can control whether or not they will be visible
    • E . all of the above
  • 原因及理解情况:这个内容看书的时候并没有看到,是不是超纲了?
  • 错题5:In order to compare int, float and double variables, you can use <, >, ==, !=, <=, >=, but to compare char and String variables, you must use compareTo( ), equals( ) and equalsIgnoreCase( ).
    • A . true
    • B . false
  • 原因及理解情况:char变量也可以使用<, >, ==, !=, <=, >=,但字符串必须用compareTo( ), equals( ) and equalsIgnoreCase( )。
  • 错题6:How many times will the following loop iterate?
    int x = 10;
    do {
    System.out.println(x);
    x--;
    } while (x > 0);
    • A . 0 times
    • B . 1 times
    • C . 9 times
    • D . 10 times
    • E . 11 times
  • 原因及理解情况:do-while语句最后的while语句,不满足条件时也要执行一次

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • 优点:每周重要成长记录很详细,在错题总结中有自己的实践。
    • 问题:博客排版还需加强,尤其是图片的摆放。从问题总结中感觉对课本知识的挖掘不是很深入。教材内容总结还可以更详细一点。错题总结中没有价值的错题可以删去_(:з」∠)_
  • 代码中值得学习的或问题:
    • 优点:代码相比我的更加简洁,并且在适当的地方有注释。commit写的很好。
    • 问题:在编译过程中发现他在数组这方面运用的不是很好。

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172322
    • 结对学习内容
      • 共同讨论例8.3和例8.8的某些代码,不懂的地方先相互解决,解决不了时找学长答疑。
      • 讨论PP8.5,尤其是最后计算标准方差时,两个人的代码基本是一个意思,但是结果都不对,而且不对的结果也不一样。所以就对每个人的代码进行分部调试共同寻找问题。

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

  • 本周最大的感觉是看完理论,应用跟不上。和之前做PP不一样,这周做题时总是感觉没思路,有种无从下手的感觉,尤其是想不清数组应该用在哪里。
  • 教材复习情况
    • 复习进度(页数):42/283
    • 重要成长:重新复习了转义序列
    • 感想:真正开始复习之后发现没有自己想的那么快,那么轻松。往往都是挤出时间去看的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 120/120 1/1 9/9
第二周 246/366 1/2 9/18
第三周 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五周 1409/2645 1/6 24/77
第六周 561/3206 1/7 20/97 再次搞清了一些自己有点含糊不清的概念
  • 计划学习时间:15小时
  • 实际学习时间:20小时
  • 改进情况:本周只有五天的时间做作业,本来觉得内容不多应该不会花费多久,没想到课后题那么难(;д;)

参考资料

posted @ 2018-04-15 23:01  框框框  阅读(174)  评论(6编辑  收藏