20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结
教材学习内容总结 |
-
数组是一个含有多个值的列表,每个值存在于数组中特定的,具有编号的位置。
-
数组的声明:(1)int[] xxx = new int[3];表示实例化数组xxx后,为其预留了存放三个整型值的内存空间,索引为0、1、2。(2)int[] xxx={1,2,3};表示用初始值表实例化一个数组对象,并为数组中的每个元素提供初始值。
-
数组作为参数:整个数组可以作为一个参数传递给一个方法,这种方法可以实际改变该数组元素,一个数组元素也可以传递给方法。
-
对象数组:数组可以将对象引用作为元素保存,每个数组元素所代表的对象必须分别实例化后才可直接使用,如
person[] ps = new Person[2]; ps[0] = new Person(name0,phone0); ps[1] = new Peeson(name1,phone1);
-
命令行实参:String[]参数(通常称为args)代表了命令行参数,调用解释器时关于命令行的信息将存放在args数组中供程序使用。例如
public class xxx{ pubilc static void main(String[] args){ System.out.print("args[0] = " + args[0]); }
运行时,输入
java xxx hello
,输出的就是args[0] = hello
; -
可变长度参数表:将java方法定义为参数个数个数可变的方法,每次调用这个方法时处理的数据量不同。例如
public double average(int...list)
average方法可接受任意个数(包括0)的int参数。多个参数的类型可以是基本类型或对象类型;接收可变参数的方法可以是基本类型或对象类型,可变参数需写在形参表最后,且一个方法只能有一组可变参数。
-
二维数组:保存整型数的二维数组形式为int[][];每个维的大小可以不同,也可以使用初始值表实例化二维数组,需要用双重循环来输出二维数组的每一个元素
教材学习中的问题和解决过程 |
- 问题一:看到书中这样一段话时不理解
将一个数组作为参数的方法可以实际改变该数组的元素,因为该方法引用的是原始数组的元素值。但该方法不能改变数组引用本身,因为它所接受的参数是原始数组引用的副本。
- 问题一解决:在助教的帮助下,利用书中的例8.4进行了试验,才理解了。第一张图是将数组作为方法的参数,在引用方法时,修改索引值为0的元素,再次输出此数组时,索引值为零的元素改变了。同时,对这一个问题做出了扩展,第二张图调用了方法修改索引值为0的元素,修改了这个数组,成为了一个新数组,输出这个新数组,索引值为0的元素也改变了。
-
问题二:再看到书上例8.3时,其中
upper[current-'A']++
不理解,current是char型的值,upper是int型的值。 -
问题二解决:char类型的值相加减实际上为对应的ASCCI码相加减,结果为int型的。这里current代表检测到的字符,它减去开头的‘A‘字符,则为他的序号,所以
upper[current-'A']++
代表这个字符出现的次数。 -
问题三:不知道
System.out.print(prime + " ");
其中prime是一个int型,那“ ”是什么意思。 -
问题三解决:为了输出prime的值,需要把他转换成字符串型的,所以加上“ ”来转换。
代码调试中的问题和解决过程 |
- 问题一:如图, 用list.length表示数组长度时,输出的均值为零。当添加语句
System.out .println(list.length ) ;
时,发现它的值不是5而是50,即为每次输入一个整数时与之前输入的积累2 + 2+3 + 2+3+4 + 2+3+4+5 + 2+3+4+5+6=50
- 问题一解决:把list.length修改为num1后,则正确,原因是在上面的程序中,每输入一个num,则执行num++,所以num就代表数组中的元素个数,而list数组中的元素值我已经定义为
list[num1]=num
,所以数组中的每个元素值是个积累得来的数值,并不是输入的数值。
- 问题二:输入数值后并没有按照我所要求的做出反应。
- 问题二解决:后来仔细查看了代码,发现如果我输入的第一个数不为零,则进入else条件句中,并且在while语句中循环,此时再输入零自然没反应,直到输入够50个数后才能跳出循环。
代码托管 |
上周考试错题总结 |
- 错题一:The idea that program instructions execute in order (linearly) unless otherwise specified through a conditional statement is known as flow of control
- 错题一解析:“控制流程”描述了指令执行的顺序。它默认为线性(或顺序),但通过使用控制语句(如条件和循环)进行更改。
- 错题二: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?
if (x > 0) x++;
else if (x < 0) x--; - 错题二解析:我选择的答案是“if (x > 0) x++;
if (x < 0) x--; else x = 0;”我选择的答案中,如果x是正数,执行x++,在任何情况下,都会执行第二条语句,如果x不是负数,那么执行else将x变为零,所以错误。 - 错题三:If x is an int where x = 1, what will x be after the following loop terminates?
while (x < 100)
x *= 2; 128 - 错题三解析:当X等于64时,再次判断,他还是小于100的,所以再次执行x *=2语句,变为128,之后不满足循环条件。
- 错题四: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
D . you can control whether or not they will be visible - 错题四解析:复选框可能会被check或不被check,单选按钮是一种特殊的复选框,他们是Java组件,你可以控制复选框是否可见。以上都是复选框的特点。
- 错题五:In Java, selection statements consist of the if and if-else statements. false
- 错题五解析:还有swich语句也是。
- 错题六:In order to compare int, float and double variables, you can use <, >, ==, !=, <=, >=, but to compare char and String variables, you must use compareTo( ), equals( ) and equalsIgnoreCase( ).false
- 错题六解析:可以使用<,>,==,!=,<=,> =直接比较char变量,但是对于任何字符串比较,必须使用compareTo(),equals()和equalsIgnoreCase()。
- 错题七:A continue statementmay be used within any Java loop statement
- 错题七解析:尽管应该避免使用continue语句,但是如果可能的话,它们可以在Java的三个循环中使用:for,while和do-while。
- 错题八:The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operat y = (x < 0) ? x : 0;
- 错题八解析:这道题目是语句记错了,我选择的是“(x <0)?y = x:y = 0;”
- 错题九:How many times will the following loop iterate?
int x = 10;
do {
System.out.println(x);
x--;
} while (x > 0 ); 11 times - 错题九解析:输出多少个数就循环多少次,输出的数依次是:10、9、8、7、6、5、4、3、2、1、0。当x=1时还会循环一次,我错在这里,误认为这时就停止了。
- 错题十:Given that s is a String, what does the following loop do?
for (int j = s.length( ); j > 0; j--)
System.out.print(s.charAt(j-1)); it prints s out backwards - 错题十解析:j表示字符s的长度,j-1表示最后一个字符的索引值,所以是从后往前的。
- 错题十一:In Java, it is possible to create an infinite loop out of while and do loops, but not for-loops. false
- 错题十一解析:循环可以是无限循环,但Java for循环也可以是无限循环。在许多其他编程语言中,这种情况并非如此,其中for循环具有设置的起点和终点,但Java for-loops比大多数其他语言的for-loops灵活得多。
结对及互评 |
本周结对情况
- 对象:20172323王禹涵
- 结对学习内容
- 第八章(数组)
- 完成课后PP8.1、PP8.5、PP8.6
点评
-
博客中值得学习的或问题:
- 博客很精美,很漂亮,用队友的话来说我的很朴素,下次尝试一下他的排版。
- 内容完整,图文并茂。
- 不足之处在于对问题的分析相对较简单,可以尝试记录一下问题的解决过程。
-
代码中值得学习的或问题:
- commit的阐述符合要求,粒度合理。
- 代码规范,可读性强。
-
基于评分标准,我给本博客打分:9分。得分情况如下:
- 正确使用markdown语法(1分)。
- 模板要素齐全(1分)。
- 问题加分(4分)。
- 代码量(1分)。
- 排版精美加一分
- 代码规范加一分
其他 |
在这周的学习中感觉自己的逻辑性不好,写的循环大多是有问题的,在编写pp之类的代码时,想的有点复杂,在最开始时误以为代码需要实现的很多功能后来发现不用那么复杂,所以开始走了很多弯路,感觉还是对循环语句掌握的不好,总会想着绕很大的弯去实现一些操作,但其实可以用一些巧妙的语句实现。但问题是我就是想不到啊罒ω罒
学习进度条 |
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 93/93 | 1/1 | 20/20 |
第二周 | 305/398 | 1/2 | 20/38 |
第三周 | 328/651 | 2/4 | 25/60 |
第四周 | 1013/1689 | 1/5 | 30/90 |
第五周 | 795/2407 | 1/6 | 30/120 |
第六周 | 1117/2921 | 1/7 | 30/150 |
参考资料 |