20172321 2017-2018-2 《程序设计与数据结构》第6周学习总结
20172321 2017-2018-2 《程序设计与数据结构》第5周学习总结
教材学习内容总结
- 数组是一种用于分组和组织数据的编程语言结构,数组引索从0开始。
- 创建数组必须声明数组引用变量,如int[] height = new int[11],11就是数组的大小,引索为1~10。可以用length检查数组边界。
- 数组也可以将对象引用作为元素保存,对每个数组所代表的对象必须分别实例化。
- Java中,main方法的形参总是一个String对象数组。命令行实参是给程序提供输入信息的又一种方式。
- 将Java方法定义成参数个数可变的方法,用省略号表示参数可变。可变参数必须写在形参表最后,一个方法只能接收一组可变参数。
- 一个二维整型数组实际上是由一维数组引用构成的一维数组。
教材学习中的问题和解决过程
- 问题1:在学习例题8.3的时候,对
upper[current- ‘A‘]++
不理解。 - 问题1解决方案:因为字符处理基于Unicode字符集,AZ,az在字符集上连续,所以例如current为E的时候,在数组upper的引索为4。
- 问题2:命令行实参的意义和用法,第一遍看书完全不懂。
- 问题2解决方案:通过百度搜索,例如
就函数y=f(x)而言,若将a=4代入函数f(x),那么y=f(a)=f(4),y表示f(a)的返回值
1、形式参数——f(x)中的"x",充当形式上的参数,用于表示出函数式的具体的、因输入的参数不同而发生的变化操作。x只是个形式,又好比是一个大的方格,表示将要填进去的数,而要填进去的数就是实际参数了。
2、实际参数——y=f(a)中的"a",表示函数被运用时实际涉及到的参数,它需要被定义、需要实际存在、一般需要被赋值。 - 问题3:可变长度参数作用
- 问题3解决方案:
在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况。一般会用方法重载来解决问题:
1 //方法重载,解决参数个数不确定问题
2 public void method();
3 public void method(int i);
4 public void method(int i, int j);
5 public void method(int i, int j, int k);
但是当参数多的时候就会显得很繁琐,同时每次扩展都会很麻烦。于是可以使用数组作为参数:
1 int[] a={1, 2, 3, 4};
2 public void method(int[] args);
```
但是这样还是有个准备参数的过程(还要构造一个数组)。于是可以使用可变参数的方式:
1 public void method(int...args);
这样做就可以解决参数个数不确定的问题。
## 代码调试中的问题和解决过程
- 问题1及解决方案:
做pp8.1的时候最后输出的结果就算那个数字没有出现过,但是也会输出它和它的次数零次,这样很不方便观看,在最后输出之前加一个 ``` if(upp[ i ] != 0 ``` 应该可以美观一些。
![](https://images2018.cnblogs.com/blog/1333060/201804/1333060-20180415144632214-648106640.png)
- 问题2及解决方案:做pp8.2的时候最开始一直在想用什么方法表示自己输入结束了,先是想用一个特殊的数字比如999这样的来表示输入结束,但是总感觉不行,之后决定用例题5.9的方法 ``` while (anther.equalsIgnoreCase("y")) ``` 来不断询问是否输入结束;
![](https://images2018.cnblogs.com/blog/1333060/201804/1333060-20180415200417674-526592372.png)
- 问题3:编译循环的时候总会抛出ArrayIndexOutOfBoundsException这个错误,偶尔编译成功了测试的结果也很诡异。
- 问题3解决方案:后来发现因为我计算平均值用的是书上的一个例子,但是实际情况是不同的,我的循环条件不应该是用 ``` Array.length ```
![](https://images2018.cnblogs.com/blog/1333060/201804/1333060-20180415145346275-2117744367.png)
- 问题4:变量一多起来,初始化的时候不注意就会弄乱,循环起来我自己都害怕。
![](https://images2018.cnblogs.com/blog/1333060/201804/1333060-20180415145610307-2057866111.png)
- 问题4解决方案:还是要养成好的习惯,编写之前要有清晰的思路,提前想清楚变量和它们会在哪些地方用。
- 问题5:我确实是很想把pp8.6写出来,再把编写它时遇到的问题和解决方法写出来,可是我现在是真的写不出来,等我做出来了尽快补上吧。
## [代码托管](https://gitee.com/CS-IMIS-23/why20172321.git)
![](https://images2018.cnblogs.com/blog/1333060/201804/1333060-20180415145913382-1424720770.png)
## 上周考试错题总结
- 错题1
If two variables contain aliases of the same object then
A . the object may be modified using either alias
B . the object cannot be modified unless there's but a single reference to it
C . a third alias is created if/when the object is modified
D . the object will become an "orphan" if both variables are set to null
E . answers A and D are correct
正确答案: E 你的答案: A
- 理解情况
根据定义,别名提供了一种可以修改对象的方法(别名类似于指针)。如果两个变量都被设置为空,那么对象就不会被任何变量引用(通过任何别名),而且它确实会成为“orphan”,并且它将在将来的某个时刻被垃圾收集。
- 错题2
Which properties are true of String objects?
A . Their lengths never change
B . The shortest string has zero length
C . Individual characters within a String may be changed using the replace method
D . The index of the first character in a string is one
E . Only A and B are true
正确答案: E 你的答案: C
- 理解情况
字符串是不可变的。这意味着一旦创建了字符串对象,它就不能被更改。因此,一个字符串的长度一旦被创建就不会改变。最短长度的字符串是“”,引号之间没有字符,所以长度是零。替换方法允许您从原始字符串创建一个新字符串,替换一些字符。字符串中第一个位置的索引是0而不是1。此外,每个字符串的最后一个字节包含字符串结束字符,即低值字节或二进制零。
- 错题3
What happens if you attempt to use a variable before it has been initialized?
A . A syntax error may be generated by the compiler
B . A runtime error may occur during execution
C . A "garbage" or "uninitialized" value will be used in the computation
D . A value of zero is used if a variable has not been initialized
E . Answers A and B are correct
正确答案: E 你的答案: A
- 理解情况
因为java是一种非常“安全”的语言,因此它不允许在计算中使用“垃圾”或“零”。如果编译器能够检测到未初始化变量的尝试使用,它将在这种情况下产生语法错误。如果这样的使用会使编译器的检测失效,那么在使用时就会发生运行时错误。
- 错题4
Say you write a program that makes use of the Random class, but you fail to include an import statement for java.util.Random (or java.util.*). What will happen when you attempt to compile and run your program.
A . The program won't run, but it will compile with a warning about the missing class.
B . The program won't compile-you'll receive a syntax error about the missing class.
C . The program will compile, but you'll receive a warning about the missing class.
D . The program will encounter a runtime error when it attempts to access any member of the Random class
E . none of the above
正确答案: B 你的答案: D
- 理解情况
因为缺少类意味着会有未定义的变量或方法。编译器将检测这些错误并发出错误消息。所以程序不会是可执行的。
- 错题5
Which of the following will yield a pseudorandom number in the range [ -5, +5 ) given the following:
Random gen = new Random( );
A . gen.nextFloat( ) * 5
B . gen.nextFloat( ) * 10 - 5
C . gen.nextFloat( ) * 5 - 10
D . gen.nextInt( ) * 10 - 5
E . gen.nextInt(10) - 5
正确答案: B 你的答案: E
- 理解情况
B.[0.0,1.0) * 10 = [0,10) - 5 = [-5,5)
D.产生0~9十个整数,最后-5~4十个整数
- 错题6
Consider the following two lines of code. What can you say about s1 and s2?
String s1 = "testing" + "123";
String s2 = new String("testing 123");
A . s1 and s2 are both references to the same String object
B . the line declaring s2 is legal Java; the line declaring s1 will produce a syntax error
C . s1 and s2 are both references to different String objects
D . s1 and s2 will compare "equal"
E . none of the above
正确答案: C 你的答案: A
- 理解情况
两个声明都是合法的java。
S1是一个字符串引用,它被初始化到字符串“testing123”。S2是一个字符串引用,它被初始化到字符串“测试123”;S2是“testing 123”,有空格,所以两个不一样。
- 错题7
When comparing any primitive type of variable, == should always be used to test to see if two values are equal.
A . true
B . false
正确答案: B 你的答案: A
- 理解情况
对于int, short, byte, long, char 和 boolean,是用==,对于double或float变量来说不是。如果测试两个double变量,X和Y,(X==Y)只有当它们完全等于最后一个小数点时才正确,通常是X-Y与一个数比较。
- 错题8
These two ways of setting up a String yield identical results:
a) String string = "12345"
b) String string = 12345;
A . true
B . false
正确答案: B 你的答案: A
- 理解情况
没有从数字到字符串的自动转换,所以第二个语句不会编译,第二个语句将收到有关不兼容类型的语法错误。
- 错题9
The names of the wrapper classes are just the names of the primitive data types, but with an initial capital letter.
A . true
B . false
正确答案: B 你的答案: A
- 这对于大多数包装器类都是正确的,但是对于INT(整数)和char(字符)是错误的。
## 结对及互评
### 点评模板:
- 博客中值得学习的或问题:
- 一旦和字符串有关是一定要联想到Unicode字符集。
- 命令行实参应该把sr做了这样能理解透彻一点点点点点点点点点。
- 可变长度参数
- 代码中值得学习的或问题:
- 其实我觉得用999来结束输入蛮好的...下一应该尝试输入666来继续输入。觉得```.equalsIgnoreCase("y")) ```这个方法真的很好用,但是没有怎么看懂```if(upp[i]!=0)```这个,我觉得没出现这样的问题啊....
- 接上一条,看错了原来你说的pp8.1,要注意书上说明了输入一个0~50之外的数来结束输入!改!哈哈哈哈啊哈哈
- 书上有ArrayIndexOutOfBoundsException原因的内容的,还可以看看java.api文档进行查找。
- 变量多了怎么办,用idea啊,检查错误的速度令人感动。
- 加油编8.6
- 基于评分标准,基于评分标准,我给本博客打分:14 。
得分情况如下:
1. 正确使用Markdown语法(加1分)
2. 模板中的要素齐全(加1分)
3. 教材学习中的问题和解决过程, 加4分
4. 代码调试中的问题和解决过程, 加4分
5. 本周有效代码超过300分行,加2分
6 其他加分,加2分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
### 点评过的同学博客和代码
- 本周结对学习情况
- [结对同学学号24](http://www.cnblogs.com/amberR/p/8849517.html)
- 结对学习内容
- 稍微认真讨论学习了一下编程项目pp8.1、pp8.2
## 学习进度条
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 189/189 | 1/1 | 18/18 | |
| 第二周 | 250/439 | 2/3 | 21/39 | |
| 第三周 | 437/876 | 2/5 | 25/64 | |
| 第四周 | 459/1335 | 2/7 | 31/95 | |
| 第五周 | 547/1882 | 1/8 | 30/125 | |
| 第六周 | 692/2574 | 2/10 | 33/158 | |
## 参考资料
- [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)
- [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)