zoukankan      html  css  js  c++  java
  • 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

    参考资料

  • 相关阅读:
    centos7安装Nginx
    activiti数据库表结构剖析
    Consider defining a bean named 'entityManagerFactory' in your configuration解决办法
    mongodb远程数据库的连接以及备份导入导出数据
    在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
    node.js搭建Web服务器
    Spring Boot 引入org.springframework.boot.SpringApplication出错
    CentOS7搭建SVN服务器
    Linux环境下MySQL报Table 'xxx' doesn't exist错误解决方法
    Linux内核协议栈 NAT性能优化之FAST NAT
  • 原文地址:https://www.cnblogs.com/Qiuxia2017/p/8783277.html
Copyright © 2011-2022 走看看