20182306 2019-2020-1 《数据结构与面向对象程序设计》第二、三周学习总结

教材学习内容总结

  • Scanner类输入先输入创立对象例如Scanner scan = new Scanner(System.in).再凭借此进行输入。如a=scan.nextInt(),注意后面的类型首字母大写。
  • Math是静态方法
  • java.text包有NumberFormat和DecimmalFormat
  • message=scan.nextLine;将下一行输入的一行文本作为字符串变量保存。
  • 整形除以浮点型,整形自动转化为浮点型,再进行运算。
  • import java.util.Scanner;在类定义之前,告诉系统要使用Scanner类。
  • Random类:属于java.util包
  • 包与类库:package和API(Application Programming Intefaces)

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

  • 问题1:什么是类方法或静态方法?
  • 问题1解决方案:一个类的方法即静态方法可以通过定义该方法的类名调用,如Math.abs。如果方法不是静态的,则只能通过一个实例调用。
  • 问题2:NumberFormat对象的使用不能用new来创建,也不可以直接调用其方法。
  • 问题2解决方案:NumberFormat不能用new运算符来实例化一个对象,而且一次只能用里面一个方法来创建一个对象。根据教材中给出的例子程序,我们一次只能创建一个用于返回格式化值的对象getCurrencyInstance和getPercentInstance,接着将数字以字符串的形势用format()方法返还回去。即先设定对象的模式,再调用方法。

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

  • 问题1:我发现我的码云在班级中没有仓库
  • 问题1解决方案:将我之前的仓库删掉,然后将Linux的之前绑定的仓库解绑,然后用 git clone绑定新的仓库。将之前的代码上传。
  • 问题2: Java中也存在吃回车问题
  • 问题2解决方案:输入op=scan.nextLine();将缓冲的回车吃掉。
  • 问题3:在public class后面的文件格式有问题
  • 问题3解决方案:后面的文件名不能带.

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • A cast is required in which of the following situations? (下列哪种情况需要强制转换?)
    A .using charAt to take an element of a String and store it in a char (使用charAt来获取字符串元素并将其存储为char类型)
    B .storing an int in a float (将一个int类型的数存储为float类型)
    C .storing a float in a double (将一个float类型的数存储为double类型)
    D .storing a float in an int (将一个float类型的数存储为int类型)
    E .all of the above require casts (以上所有情况都需要强制转换)
    正确答案: D 你的答案: B
    解析:对于A,Charat返回一个char,所以没有问题。在B和C中,这种情况正在扩大采用较窄类型的操作,并将值存储在更宽的类型中。只有在D的情况下,一个更宽的类型被存储在一个更窄的类型中,所以需要一个转换。

  • What is output with the statement System.out.println(""+x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(""+x+y);的输出是什么?)
    A .15
    B .105
    C .10 5
    D .x+y
    E .An error since neither x nor y is a String (因x和y都不是字符串而引起的一个错误)
    正确答案: B 你的答案: A
    解析:“导致表达式的其余部分被视为字符串,因此两个+符号被用作字符串连接。因此,x+y与y或105连接在一起。

  • You cannot cast a String to be a char and you cannot cast a String which stores a number to be an int, float or double. (你不能将字符串强制转换为char类型,也不能将一个字符串强制转换为int、float或double类型。)
    A .true
    B .false
    正确答案: A 你的答案: B
    没有将字符串强制转换为基本类型之一的机制,但有一些方法可用于执行类似的操作,并在给定位置(Charat)返回字符或返回与字符串中存储的数字相等的int值、Float值或双值。

  • Which of the sets of statements below will add 1 to x if x is positive and subtract 1 from x if x is negative but leave x alone if x is 0?

    A .if (x > 0) x++;else x--;
    B .if (x > 0) x++;else if (x < 0) x--; C .if (x > 0) x++;if (x < 0) x--;else x = 0;
    D .if (x == 0) x = 0;else x++;x--;
    E .x++;x--;
    正确答案: B 你的答案: C
    解析:如果x是正的,如果x是负x,则执行x+,否则什么都不会发生,或者x不受影响。在A,C,D和E中,逻辑是不正确的。在A中,x-,如果x不是正的,那么如果x是0,x变成-1,这是错误的答案。在C中,如果x为正,则执行x+。在这两种情况下,都会执行下一条语句,如果x不是负的,则执行etc子句,将x设置为0。因此,如果x是正的,在这组代码之后,它变成0。在D中,x+和x-都是在x不是0的情况下执行的。在E中,这段代码并不试图确定x是正还是负,它只是添加一个,然后从x中减去1,使x保持不变。

  • If x is an int where x = 1, what will x be after the following loop terminates?
    while (x < 100)x= 2;
    A .2
    B .64
    C .100
    D .128
    E .none of the above, this is an infinite loop
    正确答案: D 你的答案: B
    解析:对于x=1,循环条件为true,语句执行,加倍x,现在为2。由于循环条件仍然为真,语句再次执行,将x加倍为4。在接下来的4次迭代中,该条件仍然为真,其中x变为8、16、32和64。由于(x<100)在x=64时仍然为真,所以循环再次迭代,x变为2
    64=128。现在,(x<100)不再为真,循环以x=128结束。

  • In Java, selection statements consist of the if and if-else statements.
    A .true
    B .false
    正确答案: B 你的答案: A
    解析:此列表省略开关语句。

  • 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、字节、Long、char和boole是正确的,但对于Double或Float变量则不是这样。如果两个双变量x和y正在测试,则(x=y)只有在它们完全等于最后一个小数点的情况下才是真的。相反,比较这两个值是很常见的,但考虑到价值上的微小差异。例如,如果Theta=0.000001,我们可以用(x-y<=Theta)而不是(x=y)来测试x和y,以便更好地了解它们是否足够接近,是否被认为相等。

  • In order to compare int, float and double variables, you can use <, >, ==, !=, <=, >=, but to compare char and String variables, you must use compareTo( ), equals( ) and equalsIgnoreCase( ).
    A .true
    B .false
    正确答案: B 你的答案: A
    解析:还可以使用<,>,=,!=,>=,>=直接比较char变量,但是对于任何字符串比较,您必须使用compareto()、equalsIgnoreCase()和equalsIgnoreCase()。

  • In Java a variable may contain
    A .a value or a reference
    B .a package
    C .a method
    D .a class
    E .any of the above
    正确答案: A 你的答案: E
    解析:Java变量包含值或对类实例的引用(这些实例包含值和/或其他引用)。

  • 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
    解析:“实例化”意味着创建对象的新实例。这通常是通过使用新的运算符来实现的。对于String,只需在表达式中使用引号即可创建新实例(实例化)。例如:String s;s=“a newstring(实例)”;

  • 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 你的答案: B
    解析:这两个声明都是合法的Java。S1是一个字符串引用,它被初始化为字符串“test 123”。S2是一个字符串引用,它被初始化为字符串“test 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
    解析:当有两个或多个对同一个物理对象的引用时,会出现一个“别名”,因此通过跟随引用,可以读取/写入/修改对象。

  • Consider the following enumeration

enum Speed { FAST, MEDIUM, SLOW };
A .The ordinal value of MEDIUM is 2
B .The ordinal value of SLOW is 1
C .The name of the Speed enumeration whose ordinal value is zero is FAST
D .The name of the Speed enumeration whose ordinal value is one is SLOW
E .None of the above
正确答案: C 你的答案: E

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

  2. 模板中的要素齐全(加1分)

  3. 教材学习中的问题和解决过程, 3个问题加3分

  4. 代码调试中的问题和解决过程, 3个问题加3分

  5. 本周有效代码超过300分行的(加2分)

  6. 周五前发博客的加1分
    感想,体会不假大空的加1分
    排版精美的加一分
    进度条中记录学习时间与改进情况的加1分
    有动手写新代码的加1分
    课后选择题有验证的加1分
    错题学习深入的加1分
    点评认真,能指出博客和代码中的问题的加1分
    结对学习情况真实可信的加1分

点评模板:

  • 博客中值得学习的或问题:

    • 博客的排版比上次好多了
    • 博客的内容很充实,问题和解决方案写的很详细
  • 代码中值得学习的或问题:

    • 代码目录很整齐,方便查找
    • 代码的数量有大幅的增长
  • 基于评分标准,我给本博客打分:15分。得分情况如下:

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182313
    • 结对学习内容
      • Random,Math等类的使用方法
  • 上周博客互评情况

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

Java作业越来越多,所以不能养成拖得习惯,尽量提前预习,

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 168/168 2/2 22/22
第二周 300/500 1/3 16/38
第三周 855/1000 2/5 22/60

参考资料