1 2 3 4

20172310 2017-2018-2 《程序设计与数据结构》第四周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第四周学习总结

教材学习内容总结

第四章

  • 类结构、实例数据、形式参数、实际参数这些概念实在是很容易混淆,一开始我都完全不知道程序中的各个数据到底是什么意思,不过后来同过自我学习和老师的讲解逐渐明白了这些概念的区别,实际参数是调用一个方法时,在方法名后的圆括号中一一对应所输入的数据,形式参数则是方法申明首部中给出的参数列表,实例数据则是在创造类时赋给它的属性,可以是变量或是常量。
  • 学习了修饰符,知道了之前在编写方法时为何要加public private等。
  • 还学习了访问器方法、修改器方法和Tostringreturn这些基础的知识。

第七章

  • 第七章主要是在掌握了第四章的基础之后,进一步的学习如何来真正设计一个对自己有价值的,及面向对象的软件。
  • 学习了静态方法、静态变量这两个静态类的成员。
  • 问题描述中的名词可能指明了程序中需要的一些类和又对象。
  • 静态变量由类的所有实例共享。
  • 一个聚合对象由其他的对象组成,形成一种“有”关系。
  • 接口是抽象方法的集合,因而不能被实例化。
  • 枚举类型的值是具有该枚举类型的静态变量,在枚举类型的类定义中可以增加属性和方法。
  • 多个重载方法可以由方法的参数个数、类型及参数顺序来区分。
  • 程序测试决不能保证程序已没有错误存在,成功的测试就是能够发现错误的测试。

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

  • 问题1:课本4.4.2中,我对形式参数和实际参数理解不了(博客开头就提到当时真的不太懂)以至于在实验时出现了null的空引用。
  • 问题1解决方案:

形式参数是函数定义中的,系统没有为其分配内存空间,但是在定义里面可以使用的参数。例如:fun(int a)。这里a就是形式参数。
实际参数是函数调用的时候传给函数的变量。这个是系统实实在在分配了内存空间的变量。
简单点说,就是形式参数给个形式,实际参数放进去用。例如:fun(a);
函数声明的用处是告诉编译器声明的函数在后面有定义。如果你将函数定义放在调用的前面,就不需要声明。另外声明就是函数定义后面加上分号的形式。
例如:定义是fun(int a)。声明就是fun(int a);
对于实验的解决方法就是

在学习第七章找到了这种问题的解决方法:在上述构造方法中,this引用特指对象的实例变量,赋值语句右边的变量是构造方法的形参变量。
这种方法避免了对含义相同的变量要给出不同命名以示区别的问题。有时,这种情况发生在其他的方法中,但更经常出现在构造方法中。

  • 问题2:toString后要返回多个值怎么办
  • 问题2解决方案:在做实验时,我定义了三个实例数据,而最后我想要返回值。按照老师的演示,我最后需要用toString方法,但在return时却一直报错,于是我就使用了多个toString方法,发现还是有错误,最后才发现可以用“+”来拼接╥﹏╥

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

  • 问题1:

在IDEA中想要上传文件到码云,却遇到了这个问题

  • 问题1解决方案:其实自己还是不会使用IDEA来push和pull项目,有时成功有时又失败,(╥╯^╰╥)。

  • 问题2:课本P214页:PigLatinTranslator类没有构造方法,因为这个方法中不需要构造方法,对于这个问题其实在周一的测试中也有遇到,所以比较不理解什么时候是不需要构造方法的。

  • 问题2解决方案:课本有说过,每个类都有一个不带参数的的默认构造方法。但是必须要实例化这个类(当然这不是唯一产生对象的途径,比如单例模式,但本质上说所有途径都是一样的)的时候,那么就要用到自己写的构造函数,即告诉程序我现在要实例化一个对象了,你给我马上分配内存,将内存的首地址赋给我指定的类对象。

  • 问题3:
    在Linux中运行RationalTester程序时,一直都没有任何显示。

  • 问题3的解决方案:老师对这个程序进行调试时,发现其中有一项一直输出空值,然后才发现是循环语句打错了(还没有学循环语句)。

上周考试错题总结

  • 错题一: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.可以使用别名来修改对象
    B.对象不能被修改除非有一个单独的引用
    C.语言如果对象被修改,则会创建第三个别名。
    D.如果两个变量都被设为null,那么这个对象就会变成一个“孤儿”
    E.答案A和D是正确的
    解析:在课本3.1.1中有解释,String对象一旦被创建就不可变,但是别名提供了一种可以修改对象的方法。根据定义如果两个变量都被设为null,那么这个对象就不会被任何变量引用(通过任何别名),它确实会变成一个“孤儿”,并且在将来的某个时候会被垃圾收集。

  • 错题二: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
    解析:字符串是不可变的。这意味着,一旦创建了string对象,就不能更改它。字符串的长度在创建后不会发生改变。最短的长度字符串是"",所以长度是0。replace方法允许从原来的一个字符串中创建一个新的字符串,替换一些字符。字符串中第一个位置的索引是0,而不是1。另外,每个字符串的最后一个字节包含字符串末尾字符,它是低值或二进制0的字节。

  • 错题三: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
    解析:很多时候,编译器能够检测到未初始化的变量的尝试,在这种情况下它会产生一个语法错误。如果编译器使用逃逸检测,则在使用时出现运行时错误。Java是一种非常“安全”的语言,因此,如果在计算中使用未初始化的变量,则不允许使用“垃圾”或“零”。

  • 错题四:
    What is the function of the dot operator?
    A . It serves to separate the integer portion from the fractional portion of a floating point number
    B . It allows one to access the data within an object when given a reference to the object
    C . It allows one to invoke a method within an object when given a reference to the object
    D . It is used to terminate commands (much as a period terminates a sentence in English)
    E . Both B and C are correct
    正确答案: E
    解析: .点操作符直接追加在对象引用之后,后面是需要访问的数据或方法。在数据的情况下,访问可能是为了阅读或写作。在方法的情况下,访问是允许某人调用该方法。浮点数中的点是一个小数点而不是一个点算符。

  • 错题五:In Java, "instantiation" means
    A . noticing the first time something is used
    B . creating a new object of the class
    C . creating a new alias to an existing object
    D . launching a method
    E . none of the above
    正确答案: B
    你的答案: C
    解析:“实例化”意味着创建对象的新实例。这通常是通过使用新操作符来完成的。在字符串的情况下,只需在表达式中使用引号,就可以创建新的实例(实例化)。例如:字符串年代;s="一个新字符串(实例)";

  • 错题六: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
    你的答案: A
    假设您编写了一个程序,该程序使用了Random类,但是您没有包含java.util的import语句,(或java.util。
    )。当您试图编译并运行您的程序时将会发生什么。
    A.这个程序不会运行,但是它将会对丢失的类发出警告。
    B.程序不会编译,您将会收到关于丢失的类的语法错误。
    C.程序将会编译,但是您会收到一个关于丢失的类的警告。
    D.当程序试图访问随机类的任何成员时,程序将会遇到运行时错误
    E.以上都不是缺少的类意味着将会有未定义的变量和/或方法。编译器会检测到这些,并会发出错误消息。你的程序是不可执行的。
    错因:还是没有准确理解编译和进行的区别。
    解析:缺少的类意味着将会有未定义的变量和/或方法。编译器会检测到这些,并会发出错误消息。你的程序是不可执行的。

  • 错题七: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
    解析:gen.nextInt(10) - 5 所得到的结果是-5,-4,-3,-2,-1,0,1,2,3,4,并不是题目中所要求的,它得到的只是一些数而不是一个取值范围。而nextFloat则是在范围[0,1)中产生伪随机数字;乘以10的收益率在0到10之间,再减去5,得到结果。

  • 错题八: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 objects 1和s2都是对同一个字符串对象的引用
    B . the line declaring s2 is legal Java; the line declaring s1 will produce a syntax error 声明s2的行是合法的Java;声明s1的行将产生一个语法错误
    C . s1 and s2 are both references to different String objects s1和s2都是对不同字符串对象的引用
    D . s1 and s2 will compare "equal" s1和s2会比较"相等"
    E . none of the above
    正确答案: C
    你的答案: A
    错因:粗心大意,没有注意到两者细微的差别。
    解析:这两个声明都是合法的Java。s1是一个字符串引用,它被初始化为字符串“testing123”。s2是一个字符串引用,它被初始化为字符串“测试123”。注意“测试”和“123”之间的空格。所以这两个字符串不相等。

  • 错题九:
    An "alias"(别名) is when
    A . two different reference variables refer to the same physical object
    B . two different numeric variables refer to the same physical object
    C . two different numeric variables contain identical values
    D . two variables have the same names
    E . none of the above
    正确答案: A
    你的答案: B
    解析:当有两个或多个对同一物理对象的引用时,就会出现“别名”,这样,通过遵循任一引用,就可以读/写/修改对象

  • 错题十:
    The String class' compareTo method
    A . compares two string in a case-independent manner(独立的方式)
    B . yields (收益率)true or false
    C . yields 0 if the two strings are identical
    D . returns 1 if the first string comes lexically before the second string
    E . none of the above
    正确答案: C
    你的答案: E
    解析:如果两个字符串是完全一致的,那么它的值为0。

  • 错题十一:
    An API is
    A . an Abstract Programming Interface(一个抽象的编程接口)
    B . an Application Programmer's Interface(应用程序程序员的接口)
    C . an Application Programming Interface(一个应用程序编程接口)
    D . an Abstract Programmer's Interface(一个抽象的程序员的接口)
    E . an Absolute Programming Interface(一个绝对的编程接口)
    正确答案: C
    你的答案: B
    错因:没有理解好课本3.3.1
    解析:API是一个应用程序编程接口,它是为特定目的而构建的相关类的集合。它们通常驻留在类库中。

  • 错题十二:
    The advantage(s) of the Random class' pseudo-random number generators, compared to the Math.random method, is that(与数学相比,随机类的伪随机数生成器的优点是随机方法: )
    A . you may create several random number generators(你可以创建几个随机数生成器)
    B . the generators in Random are more efficient than the one in Math.random(随机产生的发电机比数学中的那个更有效率)
    C . you can generate random ints, floats, and ints within a range(你可以在一个范围内生成随机的ints、浮点数和ints)
    D . you can initialize and reinitialize Random generators(您可以初始化并重新初始化随机生成器)
    E . all but answer B
    正确答案: E
    你的答案: C
    错因:没有理解题目。
    解析:所有随机数字生成器的效率是一样的。随机生成器优于数学的优点。随机包含所有其他属性。

  • 错题十三:
    The advantages of the DecimalFormat class compared with the NumberFormat class include(与NumberFormat类相比,十进制格式类的优点包括)
    A . precise control over the number of digits to be displayed(精确控制要显示的数字的数量)
    B . control over the presence of a leading zero(控制一个前导零的存在)
    C . the ability to truncate values rather than to round them(语言能够截断值而不是绕过它们)
    D . the ability to display a % automatically at the beginning of the display(在显示开始时自动显示“%”的能力)
    E . only A and B
    正确答案: E
    你的答案: A
    错因:没有详细比较两者的区别
    解析:虽然十进制格式提供的控制比NumberFormat要多得多,但是通过一个或多个数学方法,截断仍然在程序员的手中“%”符号会出现在显示器的末端,而不是开始。

代码托管

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 127/127 1/1 25/25
第二周 278/405 1/2 20/45
第三周 442/847 1/3 20/65
第四周 1063/1910 2/5 30/95

其他(感悟、思考等,可选)

在学第七章的时候遇见了很多的条件语句,也遇到了很多的问题,发现就算是照着课本打,有时也会出问题,因为你根本就没有理解这些数据的含义到底是什么。所以我们的学习不只是简单照着书本上敲代码,更多的是要去理解他为什么要这样敲,要从中去总结规律,这样才能更快更好的去掌握知识。我认为我要努力的方面还有很多,还要尽量去使用网上的资源,而不是仅仅只看课本。

参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导

posted @ 2018-04-04 16:48  qx2017  阅读(351)  评论(2编辑  收藏  举报
页尾