20172328李馨雨《程序设计与数据结构》第五周学习总结
教材学习内容总结 |
第五章:条件循环和判断
- 1.布尔表达式(boolean型,只有两种结果ture或false),也就是条件。控制程序执行流程的语句分为两类:条件语句和循环语句。
- 2.条件语句主要有if语句、if-else语句、switch语句。 循环语句主要有while语句、do语句、for语句。 for语句:
- 3.相等性运算符(==、!=)和关系运算符(< 、<=、 >、 >=)和逻辑运算符(!、&&、||),运算顺序从高到低分别是:算术运算符➷相等性或关系运算符➷逻辑非➷逻辑与➷逻辑或
- 4.了解应用if语句、if-else语句、语句块(else语句只包含第一条语句)、if语句的嵌套。
- 5.数据比较中学习了浮点数的精确比较:计算两个数差的绝对值并将差和某个误差标准比较
Math.abs(r1-r2)<0.0001
,接近即认为相等,字符比较:Unicode字符集定义了java中字符的相对顺序,所以用unicode值比较,字符串比较:String类提供的方法compareToint compareTo(String str)
,还有equals方法String1.equals(String2)
)对象比较(用implements Comparable接口)。 - 6.while语句和嵌套循环,break语句和continue语句。 嵌套循环:一条if语句嵌入到另一条if语句中。 break语句:执行break语句将立即跳转到控制当前执行语句之后继续执行。 continue语句:循环控制条件将继续被计算。
- 7.迭代器概念(迭代器是一种对象,该对象提供了一些方法有助于一次处理某个集合),迭代器对象的基本方法(hasNext)、读取文本文件(新了解了Scanner的方法,即读取和处理文件方法)
8.ArrayList类,其为管理对象集的一个类。为ArrayList对象指定索堡村元素的类型,能使编译器帮助程序员检查并保证只有合适类型的对象可以保存在列表中。
第六章:其他条件判断和循环
- 1.switch语句(先计算一个表达式的值,然后将该值和几个可能的case子句进行匹配。break语句通常用来退出switch语句中的各个case语句),switch语句隐含的布尔条件是基于相等性的。 格式:
switch(布尔表达式){ case A : 语句/语句块; break; case B: 语句/语句块; break; ............. default : 语句/语句块;}
- 2.条件运算符(三元运算符,需要三个操作数(?:),条件运算符对较短表达式进行运算并返回结果) 例:
System.out.println("The value is" + ((value<=10)?"not" : " ") + ""greater than 10");
3.do语句(do循环的循环体至少会执行一次)
- 4.for语句(for语句通常用于已知循环执行次数的情况,for循环的控制头包含由分号隔开的三部分,初始化、布尔表达式、增量)
- 5.for-each循环(有助于处理迭代器问题)
6.各种循环的比较(要让循环体至少执行一次,就用do循环。for循环更倾向于知道循环次数,while循环在开始前先判断表达式初始值。)
教材学习中的问题和解决过程 - 问题1:应该如何使用块语句来创造条件语句?
- 1.(〃'▽'〃)本题解答:块语句将一组语句组织为语法意义上的一条语句。当需要在一个布尔条件的控制下处理较多的事物时,可以用块语句定义if语句的if块或者定义循环语句的循环体。
- 问题2:在做SR5.23时,程序无法正常运行,会一直出现死循环。
- 2.(〃'▽'〃)本题解答:经过老师的帮助和修改,发现在定义变量时的错误。
- 问题3:不理解迭代器。
3.(〃'▽'〃)本题解答:百度到的,然后可以进一步理解。
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。
迭代器提供一些基本操作符:*、++、==、!=、=。迭代器是个所谓的复杂的指针,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型号却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。- 问题4:switch语句中没有String类型,运算结果不能为float型或者boolean型。而且,每一个case子句中的表达式必须为常量,不能为变量或其他表达式。
4.(〃'▽'〃)本题解答:
switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;需要强调的是:long和String类型是不能作用在switch语句上的。
case B;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型)),如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着;
default就是如果没有符合的case就执行它,default并不是必须的.
代码调试中的问题和解决过程 |
- 问题1:在尝试SR2.22时出现了无限循环ミ゚Д゚彡我当时机智的按了ctrl+c,虽然终止了疯狂的弹幕,但是终究没有解决问题。
- 1.(〃'▽'〃)本题解答:经过反反复复、反反复复的检查。终于发现我应该删掉else,这样才能保证程序继续进行下去。这个错误告诉我一个道理,有if 不一定得有 else。
- 问题2:在做pp5.1时 出现了意外的类型,我的求余运算符不能成功。后来我把“=”改成了“==”就能够很好的运行了,但是不知道原理。下图是做的过程。 改完之后的成功。
- 2.(〃'▽'〃)本题解答:寻问了老师,老师说:一个=代表赋值,两个代表判断是否相等。(
感觉上次上课的时候讲过,啧啧,我干了些什么赶快拿小本子记下来记下来。) 问题3:在做pp5.7时,遇到了无法重复执行的瓶颈,编译都是成功的,但是只能进行一次,不能让游戏继续下去。
3.(〃'▽'〃)本题解答:经过与同学们的讨论和理解,最后蒋子行同学的提出Scanner将对象创建两个就可以循环执行,问题就解决了,虽然可以这样做,但是我还是不太懂原因。后面我去问王老师,他告诉我在最后的nextLine中输出\t,所以会直接跳过判断,所以只创建一个对象,但是在最后一行复写一遍末尾语句就能解决。
上周考试错题总结 |
- 问题1: The behavior of an object is defined by the object's A . instance data B . constructor C . visibility modifiersD . methods E . all of the above
- 问题1分析和领悟:这些方法规定了对象在传递消息时的反应。每条消息都是作为一个方法实现的,方法是在传递消息时执行的代码。构造函数是这些方法中的一种,但是所有的方法组合在一起决定了行为。可见性修饰符会间接地影响对象的性能。所以选择D。
- 问题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 lD . Make the class fina E . All of the above preserve encapsulation
- 问题2分析和领悟:封装意味着该类包含了操纵数据所需的数据和方法。为了正确地保存封装,实例数据不应该直接从类之外访问,因此实例数据是私有的,并且定义了方法来访问和操纵实例数据。此外,访问和操纵实例数据的方法被公开,以便其他类可以使用该对象。保留的单词“final”用于控制继承,与封装没有任何关系。
- 问题3:A variable whose scope is restricted to the method where it was declared is known as a(n) A . parameter B . global variableC . local variable D . public instance data E . private instance data
- 问题3分析和领悟:局部变量是那些被声明的方法“本地”的变量,也就是说,它们只能在那个方法中访问。全局变量是那些可以从任何地方访问的变量,而参数是传递给方法的变量。实例数据可以被看作是整个对象的全局变量。
- 问题4: A class' constructor usually definesA . how an object is initialized B . how an object is interfaced C . the number of instance data in the class D . the number of methods in the class E . if the instance data are accessible outside of the object directly
- 问题4分析和领悟: 构造器应该用于“构造”对象,也就是说,用来设置实例数据的初始值。这不是必需的,但通常是这样做的。对象的接口是由在实例数据和方法上使用的可见性修饰符所决定的。
- 问题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 privateE . may be primitive types or objects
- 问题5分析和领悟: 实例数据是组成该类的实体,可能是任何可用的类型,无论是原始的还是对象的,可能是公有的还是私有的。通过使用对象作为实例数据,它允许将类构建在其他类之上。这种关系中,类拥有其他类的实例数据,称为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 usedB . 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
- 问题6分析和领悟: 被声明为私有的类的所有条目只能被该类中的实体访问,不管它们是实例数据还是方法。在这种情况下,由于这两种方法只从Rational的其他方法(包括构造函数)调用,所以它们被声明为私有,以促进信息隐藏在更大的程度。注意,答案C不是一个正确的答案,因为reduce方法调用gcd方法,所以其中一个方法是从构造函数以外的方法调用的。
- 问题7:Consider a method defined with the header: public void doublefoo(double x). Which of the following method calls is legal? A . doublefoo(0); B . doublefoo(0.555); C . doublefoo(0.1 + 0.2); D . doublefoo(0.1, 0.2);E . all of the above are legal except for D
- 问题7分析和领悟: 在A的情况下,值0(整数)被扩展为double。在C的情况下,增加的是0.3,然后调用doublefoo。D中的参数列表是非法的,因为它包含两个双参数,而不是1。
- 问题8: 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
- 问题8分析和领悟: 在添加一段有void的构造函数后会将其语段自动看成了一个方法。所以选D
- 问题9: Every class definition must include a constructor. A . true B . false
- 问题9分析和领悟: Java允许在没有构造函数的情况下定义类,然而,在这种情况下有一个默认的构造函数。
- 问题10:Static methods cannot A . reference instance dataB . reference non-static instance data C . reference other objects D . invoke other static methods E . invoke non-static methods
- 问题10分析和领悟:静态方法是一种方法,它是类本身的一部分,而不是实例化的对象,因此静态方法是在类的所有实例化对象之间共享的。由于静态方法是共享的,所以它不能访问非静态实例数据,因为所有非静态实例数据都是特定于实例化的对象。静态方法可以访问静态实例数据,因为像该方法一样,实例数据在类的所有对象中共享。静态方法也可以访问传递给它的参数。
- 问题11:Inheritance through an extended (derived) class supports which of the following concepts? A . interfaces B . modulary C . information hidingD . code reuse E . correctness
- 问题11分析和领悟:通过延长一个类并继承它,新类不必重新实现任何继承的方法或实例数据,从而为程序员节省了一项工作。因此,代码重用是一种重用其他人的代码的能力,它可以为你的需要扩展它。
其他(感悟、思考等,可选) |
这周学习内容和高中数学中的算法语句其实是一样的,高中学习时只看中逻辑性。在真正了解到编程后。才能明白其实用性,才能更理性的看待各种app什么的小bug。这学期好忙,但是一定不能放弃java的学习。哼哼哈嘿,继续努力!!!
学习进度条 |
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 100/100 | 1/1 | 15/15 |
第二周 | 377/477 | 1/2 | 20/35 |
第三周 | 280/757 | 2/4 | 22/57 |
第四周 | 973/1730 | 1/5 | 35/92 |
第五周 | 1000/2730 | 1/6 | 40/132 |
参考资料
1.
2. 3.java程序设计(第八版) 4.