1 2 3 4

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

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

教材学习内容总结

在第八章我主要学习的数组
  • 数组是一种简单而功能强大的编程语言结构,用于分组和组织数据。除了一维数组,还有二维数组和多维数组,但在Java中很少使用高于二维的多维数组。
  • Java中访问数组的每个值的方式:一维数组:数组名[索引值]
    二维数组:数组名[索引值][索引值]
  • 在Java中数组属于对象,必须要实例化。
  • 对每个数组元素所代表的对象必须分别实例化,这样就为保存对象引用而预留了空间。此外,还可以用初始值表来实例化一个数组的对象,不需要再use new来一个个创建对象。
  • 在使用数组时,边界检查是有必要的,这样可以保证只引用有效的索引值。课本介绍了一种常用的检查方式是:数组.length
  • 数组在Java中有两种声明方式:int[] grades; int grades[]; 但第一种可以清晰地看到元素的类型
  • 整个数组可以作为参数传递给一个方法,但实际传递的是原始数组引用的副本,这时,方法的形参成为原始数组的别名。
  • 我之前在敲代码时use main 方法public static void main(String[] args)并没有考虑过这条代码到底是什么意思,(<(_ _)>惭愧),到现在才明白这是命令行实参。命令行实参是给程序提供输入信息的又一种方法。
  • 方法重载可以处理的数据量不同,此外,还有一种方法:通过特殊的形参表,也可以接受可变常数参数表如:(int ... list)

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

  • 问题1::课本有提到过,如果两个实参字符串都没有在命令行上提供,那么对args数组的引用将抛出错误异常。
    在运行这个程序时,确实出现了这个异常,但是却找不到输入命令行的方式。

  • 问题1解决方案:
    - 当你使用命令行的形式运行.class文件时,向你的类传递参数.
    C:>java YourClassName
    [参数1 参数2 参数3 ....]
    参数之间用一个空格作为间隔符.

    • String[] args 这个字符串数组是保存运行main函数时输入的参数的,例如main函数所在的类名为test,那么你在cmd运行javatest a b c 时,
      args[0]= a,args[1]=b,args[2]=c。这样你就可以在你的程序中调用你输入的这些变量了。
      课本上例题的意思就是,现在你有一个程序名字是NameTag.java,这时你输入java NameTag Howdy John,那么args[0]=Howdy,args[1]= John.
  • 问题2:在课本中例题8.8里,DVDCollection类提供了一个addDVD的方法,其中还有一个increaseSize()的方法。这让人有些不理解。

  • 问题2解决方案:

    • public void addDVD(String title,String director,int year,double cost,boolean bluray) { if (count == collection.length) increaseSize(); collection[count]=new DVD(title,director,year,cost,bluray); totalCost+=cost; count++;
    • 在increaseSize()的方法中,首先是新建了一个数组,并扩大到原来的两倍,然后用一个for循环语句将原来数组中的每一个值都复制到新的数组中(这就是比较难看懂得一点)。

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

  • 问题1:编写pp8-5时,是想按照书上的方法构造一个类,来使用可变长度的参数列表,可一直出现NaN的错误。

  • 问题1解决方案:我想要运用可变长度的参数列表,可调试时发现数组的值一直都是“0.0”。于是我想要换一种方法。

  • 问题2:我换了一种方法来编写pp8-5,但这时又出现了一些逻辑上的错误。

  • 问题2解决方案:我数如了5、10、15三个数,然后得到的平方和是100,这显然是不对的。然后我发现自己的平方和忘了加起来,而且我现在只需要
    索引值为[0][1][2]的数组值,我却让c <= sum以至于引用了第四个数。正确的应该是

代码托管

上周考试错题总结

  • 错题1及原因,理解情况If a switch statement is written that contains no break statements whatsoever,(当一个switch语句没有break语句什么将会发生)
    A .this is a syntax error and an appropriate error message will be generated(这是一个语法错误,将生成一个适当的错误消息)
    B .each of the case clauses will be executed every time the switch statement is encountered(每次遇到switch语句时,都会执行每个case子句)
    C .this is equivalent to having the switch statement always take the default clause, if one is present(这就相当于让switch语句总是使用默认的子句,如果有的话)
    D .this is not an error, but nothing within the switch statement ever will be executed(这不是一个错误,但是switch语句中的任何东西都不会被执行)
    E .none of the above
    正确答案:B
    解析:老师修改答案后是B。break语句可以使程序跳出当前所在的循环,并执行下一个循环。尽管写这样的switch语句是不寻常的,但它是完全合法的。switch语句执行的常规规则适用于在交换表达式表达式后执行匹配的case子句。在此之后,所有后续的条款都是按顺序执行的,因为没有中断语句来终止开关/案例的执行。

  • 错题2及原因,理解情况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
    ######### 给出的正确答案是E。
    解析:之前我一直我觉得应该是10次,然后我编写了一下这段程序


    虽然给出的是只有十个数,这个程序其实是循环了十一次,最后一次是不满足条件的,所以不会有是一个数。

  • 错题3及原因,理解情况: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--;
    正确答案:B
    解析:课本上有一个例子是,所以我就简单认为C选项是正确地,忘记看看两者内容的差别。正确的表达方式应该是B。

  • 错题4及原因,理解情况:Assume that count is 0, total is 20 and max is 1. The following statement will do which of the following? if (count != 0 && total / count > max) max = total / count;
    :
    A .The condition short circuits and the assignment statement is not executed
    B .The condition short circuits and the assignment statement is executed without problem
    C .The condition does not short circuit causing a division by zero error
    D .The condition short circuits so that there is no division by zero error when evaluating the condition, but the assignment statement causes a division by zero error
    E .The condition will not compile because it uses improper syntax
    解析:遗忘了最开始的条件,因为计数是0,(count!=0)是假的。因为&&条件的左边是假的,条件是短路的,所以右边没有被求值。因此,避免了一个潜在的零错误。由于条件为假,所以语句max=total/count没有执行,再次避免了零错误的潜在划分

  • 错题5及原因,理解情况The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operator as:
    A .y = (x < 0) ? x : 0;
    B .x = (x < 0) ? y : 0;
    C .(x < 0) ? y = x : y = 0;
    D .y = (x < 0);
    E .y = if (x < 0) x : 0;
    正确答案:A
    解析:没有理解好条件运算符的表达方式。在这种情况下,Java测试一个条件(x<0)的条件操作符,如果是真的,则返回值之后的值?(在本例中为x),如果为false,则返回after:(本例中为0)的值。原始if语句是将y赋值为x if(x<0)和0。这将通过将y赋值为x或0来完成(x<0),如A.在B中所示,x被赋值为y或0的值,这是向后的。在C语言中,条件运算符在语法上是无效的。在D中,y将被设置为真或假,取决于(x<0),而E中的语句在语法上是无效的。

  • 错题6及原因,理解情况The following for-loop is an infinite loop.
    for (int j = 0; j < 1000; ) i++;
    :
    A .true
    B .false
    正确答案:A
    解析:因为课本上的例子i++都是放在括号里面的,所以想当然地认为这种表示方式是错误的,其实这也是一种合法的表示。
    这个循环初始化j到0并将其与1000进行比较,但是在每次循环迭代之后不会改变j。在现实中,一旦我变得太大,无法存储在内存中,循环就会终止,但逻辑上,这是一个无限循环。

结对及互评

点评过的同学博客和代码

  • 20172309 王志伟

  • 本周结对学习情况
    - 结对学习 第八章的课本内容
    - 完成课后的练习题

  • 博客中值得学习的或问题:

    • 正确使用了Markdown格式,且格式排版精美。
    • 了解了多维数组:
      理解:假定某个宾馆有三层,每层有三个房间。
      int[][] room=new int[3][3];只不过数组的索引从0开始
      第三层:|第一间房|第二间房|第三间房|
      第二层:|第一间房|第二间房|第三间房|
      第一层:|第一间房|第二间房|第三间房|
      本质:多维数组可以理解为数组的数组。例如:
      { {1,2,3},
      {4,5,6},
      {7,8,9} }
      运用生动形象的例子,解释了多维数组的概念。

    • 在教材学习中的问题和解决过程中,问题记录很详细,而且也给出了相应的解答。
    • 蓝墨云的错题订正的比较简单。
  • 代码中值得学习的或问题:

    • 在编写pp8-5时我的方法十分的复杂,于是依照他的思路进行了简化。

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

数组在编程中的应用很多,上周学习的for-each语句也知道了应用的方式,但我觉得这章最难的就是可变长度的参数列表,其实最根本的就是自己类的编写学得不够充分,于是在构造可变长度的参数列表的类时困难重重。而且在我们现在快速的学习进程中,我发现自己对之前学的东西都在一点点的忘记,没有时间去巩固,所以自己编写程序时就不能够灵活地变通,之后的学习过程中,我应该花些时间好好复习复习。(˘•灬•˘)

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 127/127 1/1 25/25
第二周 278/405 1/2 20/45
第三周 442/847 1/3 20/65
第四周 1063/1910 2/5 30/95
第五周 840/2750 1/6 27/122
第六周 631/3381 1/7 20/142

参考资料

posted @ 2018-04-15 20:22  qx2017  阅读(304)  评论(3编辑  收藏  举报
页尾