学号 2017-2018-20172309 《程序设计与数据结构》第六周学习总结
教材学习内容总结
- 学会了怎么构建一个简单的数组:
- 定义:数组是一组数据的集合,其中的每个数据称为元素。注意:Java中数组也是对象,其中的元素可以是任意类型,但是同一个数组只能放类型相同的数据。
- 步骤:
- 声明数组类型的引用变量。
//int [] list;
- 用new语句将数组实例化、为他们分配空间并且为每个元素设置默认值。一般为0。//
list=new int[长度]
- 初始化,为每个数据配上合适的值。//
list[0]=1;
list[1]=2;
- 声明数组类型的引用变量。
其实可以一句话解决啦int []list=new int[长度];
- 了解了多维数组:
- 理解:假定某个宾馆有三层,每层有三个房间。
int[][] room=new int[3][3];
只不过数组的索引从0开始 - 第三层:|第一间房|第二间房|第三间房|
- 第二层:|第一间房|第二间房|第三间房|
- 第一层:|第一间房|第二间房|第三间房|
本质:多维数组可以理解为数组的数组。例如:
{ {1,2,3}, {4,5,6}, {7,8,9} }
- 理解:假定某个宾馆有三层,每层有三个房间。
粗略了解了数组的边界:
一个数组的索引是从0开始的。假设你设置的长度是5,你想访问最后一个元素,你可以用索引值4来访问。但是如果你用5访问,那就··
错误: ArrayIndexOutOfBountsException。
- 通过数组的
数组名.length
可以获得数组长度。length是数组的一个属性,只能读取、不能修改!
数组的copy:
书中在例子8.8中,简略的提到了数组的拷贝。书中出现的问题是使用的数组的长度不够,通过把数组的长的翻倍再把数据复制过来的方法把他解决的。
DVD[] temp=new DVD[collection.length*2];//collection是长度不够的那个数组,乘2让他的长度翻倍。 for (int dvd=0;dvd<collection.length;dvd++) temp[dvd]=collection[dvd];
教材学习中的问题和解决过程
- 问题1:对象数组是个什么鬼东西?它于二维数组有什么关系?
问题1解决方案:数组是个很奇妙的东西,它里面的数据更奇妙。这个元素可以仅仅就是个元素,还可以是一个对象,注:数组本身也是对象。这个对象还可以包含其他数据。例如:构造一个student类,他的属性包括name和age.
public class Student { private String username; private int age; public Student(String username, int age) { this.username = username; this.age = age; } 后面还有getUsername()、getAge()、toString()方法没写
现在咋们定义两个student对象并且构建一个Student数组。
student s1=student("小明",21);
student s2=student("大明",22);String[] student=new String[2];
给数组赋值:
student[0]=s1;
student[1]=s2;
用UML图表示:
他与二维数组很相似,相当于上面二维数组例子中的数组中又有数组。问题2:对于这段代码如何理解的:
for(Book myBook : library) System.out.println(myBook);
问题2解决方案:这个东西在第六章提到过,于6.4.1中的for-each循环。在上述代码中,他是处理涉及迭代器的问题的。这段代码可以这样理解:对于图书馆中的每一本书,输出他的相关信息。变量mybook依次取得集合中的每一个Book对象的值,而循环体能够相应的处理它他也等价于:
Book myBook; while (bookList.hasNext()) { myBook=bookList.next(); System.out.println(myBook); }
- 问题3:对可变长度参数表是如何理解的?
问题3解决方案:
可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意:可变参数必须在后面,当多于一个参数时,必须放在前面如
public static int add(int x,int ...args)
特点:
1.只能出现在参数列表的最后; 2...位于变量类型和变量名之间,前后有无空格都可以; 3.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
代码调试中的问题和解决过程
- 问题1:
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
上周考试错题总结
- 错题1:
正确答案:B 我的答案:C 错误原因:在C选项中,如果x=0的话,它又将给x赋值为零。而题目说的是把它放在一边。
错题2:
正确答案:A 我的答案:D 理解情况:break语句只会跳出所在的循环,并执行下一个循环。
-错题3:
正确答案:B 我的答案:A 理解情况:我们也可以用比较运算符比较char类型数据,String类型数据只能用compareTo()、equals()、equalsIgnoreCase()进行比较。
-错题4:
正确答案:E 尽管写这样的switch语句是不寻常的,但它是完全合法的。switch语句执行的常规规则适用于在交换表达式表达式后执行匹配的case子句。在此之后,所有后续的条款都是按顺序执行的,因为没有中断语句来终止开关/案例的执行。
-错题5:
正确答案:A 在Java中,就像在大多数语言中一样,循环语句基本上都是等价的(几乎可以互换)。它们的主要差异(s)与何时评估控制条件以及是否有用于递增/更新的语法有关。
错题6:
正确答案:A 我的理解:switch语句是从第一条Case开始匹配,直至停止的语句。
错题7:
正确答案:B 正确理解:break用法不是开发必须的。甚至许多开发商认其为不良用法。
其他(感悟、思考等,可选)
这一章看起来挺简单的,其实是有难度的。就像做题,看答案一看就会,但是实际做起来是根本做不来的。在做课后例题的过程中,发现以前的很多代码的格式、用法都有写不出来的情况,所以要抓紧复习以前的内容。
点评过的同学博客和代码
- 本周结对学习情况
- 20172310
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 075/200 | 1/1 | 05/20 | |
第二周 | 560/500 | 1/2 | 13/38 | |
第三周 | 972/1000 | 1/4 | 21/60 | |
第四周 | 694/1666 | 1/5 | 21/90 | |
第五周 | 1544/3095 | 1/6 | 30/90 | |
第六周 | 600/3627 | 1/7 | 30/120 |