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

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

教材学习内容总结

本周内容主要为书的8.1-8.6的内容:

  • 第八章

    1.一维数组和多维数组(二维数组为主)的声明和使用php

    2.命令行实参html

    3.边界检查(例8.8的解决办法)java

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

  • 问题1:数组的声明、使用
  • 问题1解决方案:看过书以后,自认为数组就是一个对像,一个能够容纳不少元素的对象,能够分组和管理所需数据,经过索引值来找寻对应位置上存储的内容,能够把数组理解为树状图的感受,每个索引值下方能够放不少数据,若是保存的是对象的话,则每一个对象内还能够存在多个相关的变量,很大程度上增长对复杂数据的管控和存储。数组的声明方式,对象的声明方式相似,只不过多加"[]"表示数组。
    • int[] grades;
    • int grades[];
  • 问题2:多维数组(二维数组)
  • 经过阅读教材,发现数组能够有一维的,也能够有二维的,还能够有多维数组。若是把一维数组理解为数轴,那么二维数组就能够理解为平面坐标系,三维数组能够理解为立体坐标系。就拿例8.13为例,输出的数字彻底能够看做坐标系上孤立的点。对于二维数组的声明,有三种方式:git

    • int[][] grades;
    • int grades[][];
    • int[] grades[];

    可是经过蓝墨云视频中的老师讲解,说是第三种状况和前两种的效果相同,可是没有人使用,要是用过被负责人看淡,确定会杀了你的。因此,弱弱的初学者只能默默地看过一遍,没有去用。(多是约定俗成吧),就像我以前说过的,把数组理解为树状图,对于理解四维及四维以上的数组,有很大帮助。一个分支下面能够有多个分支,以此类推,能够存储一堆有联系的,但又有微小差异的对象。web

    • 数组是在程序设计中,为了处理方便, 把具备相同类型的若干元素按无序的形式组织起来的一种形式。
  • 问题3:命令行实叁
  • 问题3的解决办法:数组

    • 在命令行中给定的参数就是命令行参数。(即从输入位置角度理解)。

    很浅层的理解,命令行实参就是能够在命令行上输入内容,做为参数放到数组里面,进行使用。在看过百度上的资料以及书上的内容,仅会使用,而且对于简单的要求能够应用,会不断的查询资料进行解决的。markdown

    • String[]参数(一般称为args)表明了命令行实参,在调用解释器时将提供给程序,即调用解释器时关于命令行的信息将存放在args数组中供使用。
    • 在命令行给定参数时,应注意什么?
      • 命令行的参数以空格隔开。可是,若命令行的参数自己包含空格时,则该参数必须用一对双引号括起来。
        如: java Test1 365 156 China "Beijing of China"

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

  • 问题1:PP8.1
  • 问题1解决方案: 这个程序,我想出四种解决方案,可是三个无用,仅有一个成功。心疼那些耗费脑细胞想出的解决方案数据结构

    - 第一种解决方案:对于记录出现次数的解决办法,我想参照例8.3的内容,它是记录大小写字母的出现次数,是基于Unicode字集符的运算,那么我是否是能够应用到数字上呢?字集符上仅有0~9几个数的编码值,想法泡汤。
    
    - 第二种解决方案:本方案是基于第一种解决方案和if语句的联合使用,若是是个位数字的话,进行一次转换,并经过自增运算符进行计数,若是是含十位数字的话,用求余的方式八十为舍掉,再转换在计数,最后两次计数差表示含十位数的是自出现次数。在进行最后的输出,不过感受太麻烦了,止步于想法,没有去尝试。
    
    - 第三种解决方案:本方案与前两个方案有较大的不一样,没有用到Unicode字符集,单纯的就是数组,我想既然索引值是数字,那为何不用数字表示数字呢?就是索引值所表明的数字为存储的数字,那么在此基础上进行自增运算,最后再调用该数剪掉对应的索引值,不就好了么。
    
    - 第四种解决方案:本方案是在第三种方案上应用的,发如今实例化数组的时候每一个索引值对应的位置都是0,那么在0的基础上进行自增,能够解决身躯不少没必要要的麻烦,这样的话就能够直接调用相对索引值内的数即为索引值数字所出现的次数。

    最终成果在仍是有一点问题,根据例5.7的内容进行应用,可是始终跳不出while循环,或是始终进不去while循环,得助于学长的帮助,想到用个if和break进行跳出循环,正好应用了一下break语句,很是成功的记录了各个数字出现的次数问题。
    less

  • 问题2:PP8.5
  • 问题2解决方案:算是第一个本身用数组编的项目,调用了Random方法用来输出随机数和Math方法进行辅助,在平均数上的使用,很成功,可是在标准方差上就错误百出,先是本身的for循环的变量设置不对,形成都是ArrayIndexOutOfBoundsException异常,解决事后的尝试便出现一堆的零,逻辑错误超恶心,经过调试,发现是本身肯定的随机范围是0~2147483647(int型的最大值),形成最后的标准方差出现了数字范围溢出int型的最大值,变为的零,仅仅修改随机数的范围就行,可是这样,不就限定了输出整数的范围么?在此基础之上,我有修饰了输出整数的格式,经过例6.3的for循环内嵌套if从句,使得每行输出6个数字,让输出结果更人性化。
    dom

  • 问题3:PP8.6
  • 问题3解决方案:针对8.6有一堆的问题,想了一天多的思路,硬是没想出来,最后翻书看到DVD的那个例题,想到利用那个进行模仿,而后针对题目中的给出的问题有又了困惑,须要写一个数组,可是写一个数组后把一个帐户进行存放的话,那么针对一个帐户的方法又该放到哪?经过学长的讲解,发现建立数组下的那个类进行对总体的编写,针对每个帐户的类进行对帐户内的东西进行编写,就像以前所说的数组理解成为树状图的方式,这样就真正的“实例化”了一个系统管理--一个管理不超过30个银行帐户的系统。可是想出来了,就是不会作,热锅上的蚂蚁着急就是不会弄,经过对于欣月的代码的理解,才初步弄懂。

    public boolean saveMoney(double a, String b, long c)
    {boolean result = false;
    for (int i = 0; i <account.length; i++){
    if (account[i] != null){
    if(account[i].getName().equals(b)&&account[i].getAcctNumber() == c){
    account[i].deposit(a);
    result = true;}
    }
    }

    其实反过来看看书中也有提示的,P257DVDCollection.java内有一句report += collection[dvd].toString() + "\n";也在暗示着,仍是本身看书不够细致致使的。在作完后看本身写的代码,想一想也没有那么难。想到有句俗语“会者不难,难者不会。”其实会与不会之间,就是一道能不能融会贯通的坎,过去了就是一片蓝天白云。

代码托管

上周考试错题总结

  • 错题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
  • 错误解析:“控制流”描述指令执行的顺序。它默认为线性的(或顺序的),可是经过使用诸如条件和循环这样的控制语句来改变。感受当时本身很混乱,明明知道条件语句能够改变控制流的,还有选择了问题上又出现的conditional statemrnt。
  • 错题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?(若是x为正则加1,若是x为负则减1,若是x为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--;
  • 错误解析:很是简单的一道题,用到自增和自减加上if语句就能够了,看到有道神奇的翻译觉得是题出错了,针对0的问题,而后没有仔细考虑就胡乱选了一个。心痛。
  • 错题3:Assume that count is 0, total is 20 and max is 1. The following statement will do which of the following?(假设count是0,total是20,max是1。下面的语句将执行下列哪项?)
    • 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
  • 错误解析:由于count是0,(count != 0)是假的。由于一个&&条件的左边是假的,条件是短路的,因此右边没有求值。所以,避免了零偏差的潜在除法。由于条件是假的,因此语句max = total / count没有执行,再次避免了可能的零错误。我给理解为两个句子,独立判断,逻辑与的短路和赋值语句的零偏差的问题。
  • 错题4:If a break occurs within the innermost loop of a nested loop that is three levels deep
    (若是在嵌套循环的最内层循环中发生了中断,那么这个循环就有三个层次。)
    • A.when the break is encountered just the innermost loop is "broken"(当遇到断点时,最里面的循环会被“破坏”)
    • B.when the break is encountered, all loops are "broken" and execution continues from after the while statement (in our example)
    • C.when the break is encountered, all but the outermost loops are broken, and execution continues from the next iteration of the while loop (in our example)
    • D.this is a syntax error unless there are break or continue statements at each loop level
    • E.none of the above
  • 错误解析:break会终止第二个循环内的第三次循环,而后外部的循环仍会继续下去。

    • 执行break语句时,将当即跳转到控制当前执行流程的语句以后继续执行。
  • 错题5: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(它们是Java组件)

    • D.you can control whether or not they will be visible(你能够控制它们是否可见)
  • 错误解析:复选框的内容是在5.8,标记星号就没看,经过通读内容大体理解了复选框。

    • 复选框是一个能够经过鼠标单击来切换开/关状态的按钮,用于设置某个布尔条件为真或假。
  • 错题6:When comparing any primitive type of variable, == should always be used to test to see if two values are equal.(在比较任何基本类型的变量时,==应该老是用来测试两个值是否相等。)
    • A.false
    • B.true
  • 错误解析:这适用于int、short、byte、long、char和boolean,而不是double或float变量。若是两个双变量x和y正在被测试,(x == y)只有当它们刚好等于最后一个小数点时才是正确的。相反,比较这两个值是很常见的,可是容许在值上有细微的差异。例如,若是= 0.000001,咱们能够经过(x - y <=)来测试x和y,而不是(x == y)来获得一个更好的概念,若是它们足够接近,能够被认为是相等的。忽略了浮点数的比较和以往不一样,以数学的观念思考这个问题。
  • 错题7:If a switch statement is written that contains no break statements whatsoever(若是一个switch语句没有包含任何break语句,)
    • 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.none of the above(以上都不是)
  • 错误解析:虽然写这样的switch语句是不寻常的,但它是彻底合法的。switch语句执行的正常规则适用于计算switch表达式以后执行的匹配的case子句。接下来,全部后续的子句都将按顺序执行,由于没有中断语句来终止switch/case的执行。想到了它会每一条都会执行,可是忘记了得先选择符合的条件,在今后后面继续执行每一条语句。
  • 错题8:A continue statement(contioue语句)
    • A.may be used within a while or a do-while loop, but not a for loop
    • B.is identical to a break statement within Java loops
    • C.may be used within any Java loop statement(能够在任何Java循环语句中使用)
    • D.may be used within a for loop, but not within a while or a do-while loop
    • E.none of the above
  • 错误解析:尽管应该避免使用continue语句,但若是可能的话,能够在Java的三个循环中使用它们:for、while和do-while。

    • continue语句和break语句会引发控制流程从一处转移到另外一处,因此在循环中使用break语句和continue与句不是个好作法。
  • 错题9:The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operator as(语句if(x < 0) y = x;else y = 0;能够用条件算符写吗?)
    • 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;
  • 错误解析:Java测试的条件操做符在本例中为条件(x < 0),若是为真,则返回值后的值?(本例中为x),若是为false,则返回:(在本例中为0)。原始的if语句是将y赋给x (x < 0)和0。这将经过将y赋值为x或0 (x < 0)来完成。(x < 0) ? y = x : y = 0;语法有错误,这个是本身看书不细致形成的遗漏,没有细细推敲书上内容。
  • 错题10:Given the following code, where x = 0, what is the resulting value of x after the for-loop terminates?
    (给定如下代码,当x = 0时,for循环结束后x的结果值是多少?)

    for(int i=0;i<5;i++)

    x += i;
    • A.0
    • B.4
    • C.5
    • D.10
    • E.15
  • 错误解析:不知道怎么回事,硬生生的把+=当作是=,姐过酒吧for最后一次循环中的i值给了x
  • 错题11: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循环的那次不算作循环,认为是10次,可是经过答案给出的11次,是本身的理解错误形成的,应该把出去的最后一次也要算上。
  • 错题12:Given that s is a String, what does the following loop do?(若是s是一个字符串,那么下面的循环会作什么呢?)

    for (int j = s.length( ); j > 0; j--)
    System.out.print(s.charAt(j-1));
    • A.it prints s out backwards(它是向后打印的。)
    • B.it prints s out forwards
    • C.it prints s out backwards after skipping the last character
    • D.it prints s out backwards but does not print the 0th character
    • E.it yields a run-time error because there is no character at s.charAt(j-1) for j = 0
  • 错误解析:作题时仍是对for循环理解不到位,在j=0的时候就已经跳出,再也不执行输出语句。会输出“s”字符串的索引值为0的字符,即s。
  • 错题13:A switch statement must have a default clause.(switch语句必须有一个default子句。)
    • A.true
    • B.false
  • 错误解析:若是没有default子句的话,switch语句仍能够执行,只不过在没有合适的语句以后会自动结束,不会输出或者执行什么。
  • 错题14:Each case in a switch statement must terminate with a break statement.(switch语句中的每一个case都必须以break语句结束。)
    • A.true
    • B.false
  • 错误解析:若是break语句不存在,则控制流将继续到下一个案例中。

    • 本次考试是本身考的最差的一次,不知道为何,从答上题开始就很混乱,错的有些事本身会的内容,固然经过这次考试,我也学到本身看书遗漏的内容,复选框的内容没有看,switch语句的case和break的问题,都是本身的食物,是本身认为这两章在高中学过循环,就忽略了细节,是本身的大意才酿成这么低的分数,已经在考完试后的次日狠狠地又看了一遍第五章和第六章。

结对与互评

点评

  • 博客中值得学习的或问题:
    • 问题详细并配有问题理解
    • 截图特别详细、针对一个问题有多张照片进行解释,图文并茂
    • 博客排版相对单调,也算做一股清流吧。但愿下次能够把博客写的更漂亮一点(能够加粗、高亮、斜体、引用等markdown格式和CSS码的运用)
  • 代码中值得学习的或问题:
    • commit的提交粒度很详细、而且是学长一直要求我达到的规范(能够参考学习)
    • 代码写的规范相对规范(建议应该配有对应的完整注释)
  • 基于评分标准,我给本博客打分:8分。
  • 得分状况以下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 两个问题加2分
    • 代码调试中的问题和解决过程, 两个问题加2分
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分

互评对象

  • 本周结对学习状况
    • 20172304方艺雯
    • 结对学习内容
      • 第八章(关于数组问题)
        • 1.一维数组和多维数组(二维数组为主)的声明和使用

        • 2.命令行实参

        • 3.边界检查(例8.8的解决办法)

感悟

第八章的学习,讲的是数组的问题,和以前学习两章相比,一次学一章,相对轻松,不过经过第八章的书后题,认识到如今的编写和以前的编写用明显的区别,各个章的内容都在用,只要有一章有欠缺,编个程序就有问题。尤为是在编写8.1和8.5的时候和第五章的内容有很大的联系,深感学习java的时候放松一会都不行。同时还要不断的动手、动手、再动手,本身发现问题,本身能解决问题。才能更好的学习java,就像学习数学同样多刷题有好处的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 136/136 1/1 15/15
第二周 570/706 1/2 20/35
第三周 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五周 904/3472 1/6 30/118
第六周 540/4012 1/7 33/151

参考资料

相关文章
相关标签/搜索