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

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

教材学习内容总结

  • 第八章是数组。那么咱们就要清楚数组的概念html

    同一类型数据的集合,就是一个容器。java

  • 声明数组有两种格式
    • 元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
      eg: int[] arr = new int[5];
    • 元素类型[] 数组名 = new 元素类型[] {元素,....};
      eg: int[] arr = new int[]{1,3,5,7};
      int[] arr = {1,3,5,7};
         注意:区别初始化和实例化。初始化列表时不用new,也不用指定数组的长度。
       注意:在全部的java运算符中,索引运算符“[]”有最高的优先级。
  • 对象数组:git

    实例化对象数组只是为了保存对象引用而预留空间,对每一个数组元素所表明的对象必须分别 实例化 编程

  • 命令行实参:String[]参数(一般称为args)表明了命令行实参。windows

    命令行实参存储在String对象的数组中,并将传递给main方法。数组

  • 可变长度参数表:
    注意几点:
    • 多个参数的类型 能够是基本类型或对象类型。
      eg:public void printGrades(Grade ... grades)
    • 接受可变参数的方法也能够接收其余的参数。
      eg: public void test(int count, String name, double ... nums)
      可变参数必须写在形参表的最后,而且一个方法不能接收两组可变参数。
  • 二维数组:能够表示为数组的数组。一个二维整型数组其实是由一维数组引用构成的一堆数组。 因此咱们能够把二维数组拆成两个部分进行分析,我以为会相对简单。数据结构

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

  • 问题1:书P246 例8.1 第一次看的时候for (int value : list)不太明白这个for循环的意思,实际上,这实际上是对上一周学习不够透彻的缘由。
    oop

  • 问题1解决方案:这个语句的本质就是for-each语句。在第六章的时候for-each循环引用的是Iterable对象中的ArrayList对象举例。依次输出数组中的值,从索引0开始。因此,在学习数组的时候,要注意应用这种循环。
    参考资料:java中for循环的几种方式
  • 问题2:书P247 边界检查中,"差1错误"
  • 问题2解决方案:书上说:学习

    这种错误由索引值比0小1或比(N-1)大1引发。测试

       简单来讲,就是由于索引值和长度值的关系不清形成的错误。咱们都知道,索引是从0开始的,而长度确定从1开始。
    那咱们看一下错误结果:

  • 问题3:书P248 例8.3 相信大多数人一开始看到这个例子真的很迷茫。确实很复杂。
  • 问题3解决方案:其实这个例子用到是ASCII码中对应的数字。
System.out.print((char)(letter + 'A'))

这个是一个数字和一个字符相加,那么就是数字和字符在其ASCII码中的数字相加,而且强行转换为char类型的。 不得不感慨这个方法的构思的精巧。

  • 问题4:书P256 例8.8
if(count == collection.length)
  increaseSize();

这个是什么意思?

  • 问题4解决方案:结合例子后的方法increaseSize()和分析,我才懂得这个是检查当前容量是否达到了容量限制。这样就能够不用担忧数组空间不足的问题。

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

  • 问题1:命令行实参例子NameTag不能运行。
  • 问题1解决方案:首先我在IDEA中编译了程序,却输出了异常,缘由就是数组中没有元素。 咱们须要在命令行下输入参数。
    因此,我切换到虚拟机。可是却发生了找不到类的问题。 这个后来却本身就行了,一直找不到缘由。

  • 问题2:虚拟机登陆后蓝屏。

  • 问题2解决方案:写博客的时候准备去虚拟机上对代码截图。登入后发现,虚拟机屏幕变蓝。没法进行任何操做。
    尝试了卸载重装(听说重装是神技),结果也不行。
    我一开始在百度上查找虚拟机蓝屏的问题,都是说的在windows下蓝屏的问题。
    而后,我也以为是无力回天了。忽然想到我应该查一下Ubuntu系统下登陆后蓝屏的问题。果真有!
    • 首先, 按下Ctrl + Alt + F4 进入一个界面。输入用户名和密码,进入root模式。
    • 而后,须要安装相应的服务而后重置。

      sudo apt-get install xserver-xorg-lts-utopic
      sudo dpkg-reconfigure xserver-xorg-lts-utopic
      reboot

    • 若是前面第一个操做有问题,须要重置 dpkg 后再试 sudo dpkg --configure -a
    • 最后,终于能够了。
    • 此次问题,让我有些理解。遇到问题,首先应该冷静分析,而后针对问题给出本身的方案,而不是乱用药,这样不过是浪费时间干着急而已。

参考资料:Ubuntu 登陆后图形化界面蓝屏问题

代码托管

上周考试错题总结

  • 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? B
    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,由于C直观上看上去就是两个if语句并列,而后一个else语句。很符合题意的样子。可是要清楚计算机的语句顺序。计算机不是人,不是你想啥,它也能想啥。它只会死板的认为, else语句是和第二个if配套的,那么题意就彻底不一样了。不管你输入的正数是多少,最后输出的都是0。
因此,咱们作题编程的时候必定要当心谨慎。不要把计算机想象成一我的。要注意计算机语言的格式。就好比:咱们用计算机作乘法的时候,数学中是否是能够省略符号,计算机中就不能够,他不可能认为5(4-3)是正确的。因此,咱们就应该注意是5*(4-3)

  • 下面哪一个选项是关于复选框的正确语句? E
    A。它们可能会被检查或检查。
    B。单选按钮是一种特殊的复选框。
    C。它们是Java组件
    D。你能够控制它们是否可见。
    E。上面全部的
    理解:这道题应该是超纲了吧。不过既然有提到,那我能够看书了解下。
    没怎么看懂吧,只能大体先理解下好了。

  • 若是一个switch语句没有包含任何break语句, E
    A。这是一个语法错误,将生成适当的错误消息。
    B。每次遇到switch语句时,都将执行每一个case子句。
    C。这等价于有switch语句老是使用默认子句,若是有的话。
    D。这不是一个错误,可是switch语句中的任何内容都不会被执行。
    E。以上都不是
    理解:switch语句一般状况下应该应用break语句和default语句的,可是也有不加上以上两个语句的状况。因此这个是没有语法错误的。若是没有break语句,接下来,全部后续的子句都将按顺序执行,由于没有中断语句来终止switch/case的执行。
    错选了B,其实B乍一看是好像是没有错误的,可是没有告诉你break语句的位置,应该是执行其他的case语句。

  • The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operator as A
    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;
    理解:条件运算符能够做为if-else的缩写语句的缩写形式。
    咱们观察选项A和选项C意思是同样的,我错选了C,注意观察,C其实只是一个包含条件运算符的表达式。是不能等同于if-else语句的。

  • 若是s是一个字符串,那么下面的循环会作什么呢?
    for (int j = s.length;j > 0;j——)
    System.out.print(s.charAt(j - 1));
    A。它是向后打印的。
    B。它向前打印。
    C。跳过最后一个字符后,它会向后打印出来。
    D。它是向后打印的,但不打印第0个字符。
    E。它产生一个运行时错误,由于在j=0的时候,s.charAt(j-1)没有字符。
    理解:变量j从字符串长度到1,每次打印出位置j-1的字符。长度为1的字符是第一个字符,这是字符串的最后一个字符。它一直持续到j = 1,并输出位置j - 1或第0字符的字符,以便向后打印整个字符串。

  • The following loop is syntactically valid.
    for (int j = 0; j < 1000; j++) j--; A
    A . true
    B . false
    理解:从逻辑上讲,这个循环没有意义,由于j将不断地递增和递减,这样它就不会达到1000,可是这个循环在语法上并无错。

结对及互评

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172304
    • 值得学习的或问题:首先,段志轩同窗的博客有些简单。博客中问题的解决过程并非很详细。但愿能够给出解决步骤和思路。其次,教材内容总结最好添加一下本身的理解。 博客的排版很好,简洁清晰。这学期,段志轩同窗在java上下了很大的功夫,由于我跟他一个宿舍的,有时候,他会敲代码敲到夜里一点多,直到电脑没电了才罢休。在编写项目上他也花费了不少时间思考,和我一块儿探讨PP8.6的思路。他确实更加勤奋。可是有时候,在代码编写上仍是有一些不细心的小错误,但愿他之后可以尽可能的避免。同时,保持这股学习的干劲,不断努力!

    • 20172328
    • 值得学习的或问题:李馨雨同窗的博客内容很是丰富,教材中有本身的理解。她的书上面五光十色的,标记的都很清楚。她的成绩一直在班里都是名列前茅的。她的问题解决也很详细,有本身的总结博客中修改字体和字体颜色,可是错题正确答案的字体效果不是特别好。但愿能够改一下。李馨雨的学习态度也很认真,每周末都泡在图书馆中学习。她对教材的理解和概念理解的很是深入,但愿能与她多交流更好地提升本身。我应该学习她的学习态度,一分耕耘一分收获,付出了多少才能获得多少。

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

这周在项目上纠结了很长时间,有思路殊不知道如何实现。对于例子和概念的理解深度仍是不够。下了功夫和没有花时间仍是有很大的区别的。同时,在测试上所用的时间较多,一方面是本身的基础理解不扎实,另外一方面对翻译后的题意有很大误差,应该增强英语的学习。commit方面正在逐步改进,总之先要注意日后的格式,以前的再慢慢的进行修改。要保持良好的心态,调整本身的压力,分配好本身的时间。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 122/122 1/1 20/20
第二周 487/609 1/2 18/38
第三周 482/1091 1/3 22/60
第四周 1357/2448 1/4 20/80
第五周 628/3106 1/5 20/100
第六周 566/3672 2/7 20/120

参考资料

相关文章
相关标签/搜索