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小时
  • 改进状况:本周只有五天的时间作做业,原本以为内容很少应该不会花费多久,没想到课后题那么难(;д;)

参考资料

相关文章
相关标签/搜索