20172328《程序设计与数据结构》第五周学习总结

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对象指定索堡村元素的类型,能使编译器帮助程序员检查并保证只有合适类型的对象能够保存在列表中。html

    第六章:其余条件判断和循环

  • 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循环的循环体至少会执行一次)java

  • 4.for语句(for语句一般用于已知循环执行次数的状况,for循环的控制头包含由分号隔开的三部分,初始化、布尔表达式、增量)
  • 5.for-each循环(有助于处理迭代器问题)
  • 6.各类循环的比较(要让循环体至少执行一次,就用do循环。for循环更倾向于知道循环次数,while循环在开始前先判断表达式初始值。)git

    教材学习中的问题和解决过程

  • 问题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语句上的。markdown

    case B;case是常量表达式,也就是说B的取值只能是常量(须要定义一个final型的常量,后面会详细介绍缘由)或者int、byte、short、char(好比一、二、三、200000000000(注意了这是整型)),若是你须要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句能够不用大括号,就是C不须要用大括号包裹着;数据结构

    default就是若是没有符合的case就执行它,default并非必须的.app

代码调试中的问题和解决过程

  • 问题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 modifiers
    D . 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 variable
    C . local variable
    D . public instance data
    E . private instance data
  • 问题3分析和领悟:局部变量是那些被声明的方法“本地”的变量,也就是说,它们只能在那个方法中访问。全局变量是那些能够从任何地方访问的变量,而参数是传递给方法的变量。实例数据能够被看做是整个对象的全局变量。
  • 问题4: A class' constructor usually defines
    A . 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 private
    E . 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 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
  • 问题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 data
    B . 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 hiding
    D . 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.java中switch语句详细用法
2.java中迭代器的使用
3.java程序设计(第八版)
4.美化CSDN博客--markdown编辑器中段落缩进、换行,改变字体、字号与颜色等

相关文章
相关标签/搜索