学号 2017-2018-20172309 《程序设计与数据结构》第5周学习总结
学号 2017-2018-20172309 《程序设计与数据结构》第5周学习总结
教材学习内容总结
第五章
- 了解到了运算符。
- 相等性运算符
=
和!=
与关系运算符<
>
<=
>=
. - 逻辑运算符:非运算
!
、与运算&&
、或运算||
.
- 了解到了if语句、if-else语句、语句块和if语句的嵌套。
- if语句:
- if-else语句:
- 学会了while语句即循环语句、和与if语句嵌套相似的while语句嵌套(在后面都有介绍)。
- 学会运用了ArrayList类,此类可以自己定义一个类。可以随机产生一个整型值并返回以该值为索引的对象。(例如:石头、剪刀、布的游戏)
第六章
- 了解到switch语句。
格式:
switch(idChar)//在下列的caseA、B选择一条语句并输出。 { case 'A'://这是冒号、不是分号! aCount=aCount+1; break; //执行break语句后退出! case 'B': bCount=bCount+1; break; default: System.out.println("没有能与idChar相匹配时,执行的语句”); }
- 学会了与if-else相似的条件运算符。
条件运算符格式:
输出两个数中较大的那个数: int larger =(num1>num2) num1:num2;//num1与num2之间是:不是;
- 对do 和 for 语句。对while、do、for循环有了一定的认识。
1.do语句
格式:do { 计算的条件 } while (条件判断);//while循环后面没;
此种语句计算的条件至少执行一次!
for语句:
格式:for (初始化部分;计算条件部分;递增)//增量部分在每次循环完成后执行并且初始化部分只执行一次。 { (执行的语句)//判断为真时 }
3.while,do,for循环的区别在后面说。
教材学习中的问题和解决过程
- 问题1:在运算符中的运算顺序是什么?(算术运算符、关系运算符和逻辑运算符之间的比较)。
- 问题1解决方案:
算术运算符最高 关系运算符次之 逻辑运算符最低(!的优先级最高) 例如:9>3+4&&7先算3+4 再判断9是不是大于7,再&&
- 问题2:在预习if-else语句的时候对于if语句的嵌套表示不理解(此时还没看到if语句的嵌套)。
- 问题2解决方案:现在总结关于if语句的嵌套有两种:
2.
- 问题3:为什么比较两个浮点数的相等性时,即使它们足够近似,也不大可能到达精确的相等?
- 问题3解决方案:
我现在的理解是:浮点值(double)用二进制表示是64位,经计算大约能表示小数点后15位左右。因此,有些浮点数是不能精确地被double表示的!
但是,如果想比较两个数值a和b的相等性,我们可以用
`Math.abs(a-b)<某个精确值`
- 问题4:下列两条语句有什么区别?
name1.equals(name2)
name1==name2
- 问题4解决方案:
首先呢,name1和name2都是String类型的数据。并且在方法二中,这种表达是没有错误的。但是,方法一是比较两个字符串中的每个字符是否完全相等,如果相同这输出true,反之false.在方法二中,
==
实际是判断两个引用变量是否引用同一个字符串对象。(也就是是否互为别名,通俗地说就是地址是否相同
- 问题5:对迭代器的了解不深,近乎没有!
- 问题5解决方案:
通过课本学习和百度搜索得到以下答案:
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
- 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素.
- 使用remove()将迭代器新返回的元素删除。
迭代器应用: ArrayList<数据类型> l = new ArrayList(); l.add("aa"); l.add("bb"); l.add("cc"); for (Iterator iter = l.iterator(); iter.hasNext();) { String str = (String)iter.next(); System.out.println(str); }
- 问题6:条件运算符和条件语句有什么不同?
- 问题6解决方案:条件运算符基于布尔表达式计算出两个可能的值中的一个,而条件语句是一组完整的语句,能够根据条件表达式计算出结果,并根据计算结果输出对应的语句。在现实编程中,应尽量少用前者,因为它的可读性不如if-else语句
- 问题7:while do while for 几种循环语句有什么区别?
- 问题7解决方案:
1.while(循环条件) {命令} while的命令不一定要执行//次数可能是零次 2.do {命令}//必须执行一次 while(循环条件) 不管while的循环条件如何比如(0>5),命令都会执行一次 3.for(初条件;末条件;循环方式) {命令} 例要输出自然数1到5可以是 for(int x=1;x<=5;x++) cout<<x<<endl;
代码调试中的问题和解决过程
- 问题1:代码编译的过程中出现情况:
- 问题1解决方案:出现这类情况的原因是代码中的括号存在不匹配的情况。例如少一个}等情况。因此,在编码的过程中我们应该尽可能地使一对括号经可能的在同一列。
- 问题2:在做PP5.7 的过程中 出现了让用户选择是否再次进行游戏的语句不能选择的情况,
- 问题2解决方案:通过问学长才知道出现这种情况的原因是:没有注意到nextInt()方法与nextLine()的区别。
nextInt()读取一个键盘获取的数字之后焦点并不会移动到下一行,这时候如果下面语句中跟了一句nextLine()的话就读不到输入的内容了。因为nextLine()是遇到换行符结束读取,nextInt()读取的内容还没有换行,所以紧跟着nextInt()的nextLine()就只是读取到了最后的换行符。所以并没有接收到在上述程序中的y/n.
- 问题3:在代码上传的过程中出现情况:
- 问题3解决方案:出现这个问题后回想是不是因为自己在输入命令
git add .
之前已经输入了这个命令。这个问题的解决方案是直接输入命令git push
. - 问题4:在完成石头剪刀布的游戏中,又什么方法达到预期要求呢?
- 问题4解决方案:
对于这个问题我认为的解决方案可能有两种:
这两种的公共点是运用ArrayList类构建石头、剪刀、布三个对象。然后在条件的判断上可能有不同。
共同点是:建立ArrayList类后让把石头剪刀布三个对象的索引分别为1、2、3(索引0可以任意取一个对象,反正我们不会使用它),之后我们可以判断用户与电脑选择的选项是否相同,相同则为平局。
不同点:利用相邻的两个对象一定有胜负,比如1(石头)>2(剪刀)、2(剪刀)>3(布)
if (date1date2-1)
{System.out.println("Did you lose!\n Your answer: "+band.get(date2)+"\nOpponent's answer: "+band.get(date1));
count1++;//电脑赢的次数
}
if (date2date1-1)
{
System.out.println("You win it!\n Your answer: "+band.get(date2)+"\nOpponent's answer: "+band.get(date1));
count2++;//用户赢得次数
}
if(date11&&date23)
{
System.out.println("You win it!\n Your answer: "+band.get(date2)+"\nOpponent's answer: "+band.get(date1));
count2++;//用户赢得次数
}
if(date13&&date21)
{
System.out.println("Did you lose!\n Your answer: "+band.get(date2)+"\nOpponent's answer: "+band.get(date1));
count1++;//电脑赢的次数另一个就是:规定好石头>剪刀、剪刀>布、布>石头,这种方法除了平局还有六种情况需要处理,较上者稍微麻烦一些。
代码托管
()
()
上周考试错题总结
- 错题1:
The relationship between a class and an object is best described as
A . classes are instances of objects
B . objects are instances of classes
C . objects and classes are the same thing
D . classes are programs while objects are variables
E . objects are the instance data of classes
正确答案:B 我的答案:E
现在理解:类包含示例数据和方法,对象需要类将它们实例化。
-错题2:
In order to preserve encapsulation of an object, we would do all of the following except for which one?
A . Make the instance data private
B . Define the methods in the class to access and manipulate the instance data
C . Make the methods of the class public
D . Make the class final
E . All of the above preserve encapsulation
正确答案:D 我的答案:C
错误原因:看到C中有一个public就以为它不能保持封装的稳定性,其实,public方法是为了能在类的外面使用到这些方法,所以用public。
-错题3:
If a method does not have a return statement, then
A . it will produce a syntax error when compiled
B . it must be a void method
C . it can not be called from outside the class that defined the method
D . it must be defined to be a public method
E . it must be an int, double, float or String method
正确答案: B 我的答案:C
现在的理解:一个类的方法构建中必须有一个返回语句,如过不返回,需要在声明返回值类型中用void声明。
- 错题4:
Consider a sequence of method invocations as follows: main calls m1, m1 calls m2, m2 calls m3 and then m2 calls m4, m3 calls m5. If m4 has just terminated, what method will resume execution?
A . m1
B . m2
C . m3
D . m5
E . main
正确答案:B 我的答案:C
正确理解:当一个方法停止时,控制会使用调用该方法的方法恢复。
- 错题5:
Instance data for a Java class
A . are limited to primitive types (e.g., int, float, char)
B . are limited to Strings
C . are limited to objects(e.g., Strings, classes defined by other programmers)
D . may be primitive types or objects, but objects must be defined to be private
E . may be primitive types or objects
正确答案:E 我的答案:C
理解情况: 实例数据是组成该类的实体,可能是任何可用的类型,无论是原始的还是对象的,可能是公有的还是私有的。通过使用对象作为实例数据,它允许将类构建在其他类之上。这种关系中,类拥有其他类的实例数据,称为has-a关系。
- 错题6:
Consider a Rational class designed to represent rational numbers as a pair of int's, along with methods reduce (to reduce the rational to simplest form), gcd (to find the greatest common divisor of two int's), as well as methods for addition, subtraction, multiplication, and division. Why should the reduce and gcd methods be declared to be private.
A . Because they will never be used
B . Because they will only be called from methods inside of Rational
C . Because they will only be called from the constructor of Rational
D . Because they do not use any of Rational's instance data
E . Because it is a typo and they should be declared as public
正确答案:B 我的答案:C
理解情况:被声明为私有的类的所有条目只能被该类中的实体访问,不管它们是实例数据还是方法。在这种情况下,由于这两种方法只从Rational的其他方法(包括构造函数)调用,所以它们被声明为私有,以促进信息隐藏在更大的程度。
- 错题7:
What happens if you declare a class constructor to have a void return type?
A . You'll likely receive a syntax error
B . The program will compile with a warning, but you'll get a runtime error
C . There's nothing wrong with declaring a constructor to be void
D . The class' default constructor will be used instead of the one you're declaring
E . None of the above
正确答案:D 我的答案:C
理解情况:构造一个类会包含构造方法,当没有构造方法时,系统自动生成一个为空的构造方法。因此在构造方法中加入Void会使其变成普通的方法,将构造方法变成为空。
- 错题8:
All Java classes must contain a main method which is the first method executed when the Java class is called upon.
A . true
B . false
正确答案 B 我的答案:A
理解情况:只有驱动程序需要一个主方法。驱动程序是在任何Java程序中首先执行的(除了applet),但是它可以根据需要调用其他类,而这些其他类不需要主要方法。
- 错题9:
Which of the following interfaces would be used to implement a class that represents a group (or collection) of objects?
A . Iterator
B . Speaker
C . Comparable
D . MouseListener
E . KeyListener
正确答案:A 我的答案 E
理解情况:迭代器是一个抽象类,允许用户通过使用此处定义的特性来扩展实现Iterator的给定类。这些特性包括能够存储一组对象并通过它们进行迭代(步骤)。
其他(感悟、思考等,可选)
这两章相对来说比较简单,但是仍有许多的细节需要注意比如while语句使用时判断语句的后面不需要分号,而在do-whiled的后面需要一个分号等。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 075/200 | 1/1 | 05/05 | |
第二周 | 560/500 | 1/2 | 13/18 | |
第三周 | 972/1000 | 2/4 | 21/39 | |
第四周 | 694/1666 | 1/5 | 21/60 | |
第五周 | 1544/3095 | 1/6 | 30/90 |