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)
原文地址:https://www.cnblogs.com/N-idhogg/p/8835483.html