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

教材学习内容总结

第二章

  • println和print的区别
    • system.out.println("换行");
    • system.out print("不换行");
  • 字符串的链接
    • 字符串常量不能占用多行。例如:system.out.println("Year in which Leonardo da Vinci invented"+"the parachute"+1515);
    • ps:+用于加法和链接,注意区分。
    • ps:内容一样也要注意区分。例如:("A piano has" +keys+"keys.");表示:A piano has 88 keys。
  • 赋值语句
    • 不能将一个类型的值赋给与之不匹配的另一个类型的变量。
  • 基本数据类型
    1. 整数与浮点型。有四种整型(int,short,long,byte)和两个浮点型(float,double).注意:相较于C语言,Java多了一个byte,byte 数据类型是8位、有符号的,以二进制补码表示的整数;优点:byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
    2. 字符型:char。
      java使用16位Unicode字符集来表示字符数据。 相对于Ascll,Unicode范围更广,更通用,同时Ascll是Unicode的子集,两者可通用。
    3. boolean型(布尔类型)。
      布尔类型不能和其他类型相互转化。
  • 表达式
    • 表达式由运算符及操作数组成,用来执行一个计算。ps:类似于C语言,故不做过多解释。
  • 数据转换
    1. 赋值转换。int dollars; float money; money = dollars;dollars可以转换为浮点型。ps:反过来不行,是缩窄转换。
    2. 提升。float sum,result; int count; result = sum / count; count会被提升为浮点型。ps:数值与字符串类似。
    3. 强制类型转换。在变量前面加(int)或者(float).
  • 读输入数据
    • 方法: String message;
      Scanner scan = new Scanner(System.in);
      message=scan.nextLine();

第三章

  • String name;虽然声明,但实际并不存在。
    • 创建方法:
      1. String name = "George Bush";
      2. String name = new String("George Bush");
      3. String name = "George" + " " + "Bush";
      4. String name = new String("George" + " " + "Bush");
  • int与String的声明。
    • int:num1 = num2两个对象
    • String:name1 = name2同一个对象,互称别名。多个引用变量可以指向一个对象。string类的对象是不可变的。
  • String类的方法与对象的用法,熟练掌握。
  • 包(图片类库的包):书P50.
  • Random类:
    • float nextFloat();返回0.0(包含)到1.0(不包含)之间的一个随机数。
    • int nextInt ();返回正数和负数内的一个随机数。
    • int nextInt (int num);返回0到num-1之间的一个随机数。
  • math类
    1. Math类的所有方法都是静态的,即通过类名来调动它们
    2. Math类有一个Random方法,返回0.0~0.1的浮点随机数。eg:static double random()。
    3. 根号下如果是负的,java将其表示为NAN。
  • 格式化输出
    • NuberFormat类和DecimalFormat类可用于对信息的格式化。ps:文头加import java.text.NumberFormat;
      • NumberFormat中两个方法getCurrencyInstance返回货币格式对象和getPercentInstance返回百分比格式对象
      • DecimalFormat类使用new运算符来实例化对象
        eg:DecimalFormat fmt =new DecimalFormat (0.###);
  • 枚举类型
    1. 字符‘-’和‘+’不是java标志符的一部分,可以使用Aminus及Bplus等来表示这样的值
    2. 枚举类型的序数只在内部使用,从0开始
    3. ordinal方法返回与一个具体枚举型值所对应的序数。
      name方法返回值得名称,即值所对应的标志符。
    • 举例:enum Season {winter , Spring , summer ,fall};Season c1,c2,c3;c1.name或者c2.ordinal.
  • 包装类
    • 自动包装提供基本数据类型与对应的包装类之间的自动转换

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

第二章

  • 问题1:如何很好地使用boolean类型?
  • 问题1解决方案:
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    boolean sex = false;
    if(sex==true){
    System.out.println("你是男的");
    }else{
    System.out.println("你是女的");
    }

}

  • 问题2:在书26页,"因为值是一个整数,所以自动转化为字符串",问如果值是浮点数怎么办?
  • 问题2解决方案:
    float f = 0.1f;
    String max ="1.7";
    DecimalFormat df = new DecimalFormat("#########.#");
    String s = df.format(Float.parseFloat(max)+f);
    System.out.println(s);
    注:DecimalFormat表示数字格式化

第三章

  • 问题3:包装类的用处
  • 问题3解决方案:
    • 包装类允许按对象的方式处理基本类型值
    • 一个函数需要传递一个Object变量 而你想传递int类型的进去显然不行,这就要用到包装类。
    • 集合不允许存放基本类型数据,只能存放包装类型
    • 基本类型和包装类之间可以相互转换
    • 基本类型之间相互转换
    • 通过包装类,String可以和基本类型之间相互转换

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

  • 问题1:代码中出现的常见小错误(自己的)
  • 问题1解决方案:
    1. import java.util.*才可以用scanner。
    2. vim使用时按ctrl+c后会打字不显示,需要按ctrl+q。
    3. Scanner scan中间没有.。
    4. Random ran = new Random();记得加()。
  • 问题2:在随机数并格式化的实验中,我运用int型不能进行格式化,修改为float才可以。为什么?(图片-1,-2):

  • 问题2解决方案:DecimalFormat的构造方法带有一个string类型的参数。所以,格式化想有小数点就要用float与double定义。具体看链接。
  • 问题3:关于DecimalFormat中模式字符串("0.####")不能打印出拖尾0,怎么办?

  • 问题3解决方案:可改为0.0000

  • 问题4:难以转换,如何解决?(图片3.1)

  • 问题4解决方案:

    • charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法.
    • charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.
    • 如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
    • 总体来说,string a ,char c;
  • 问题5:为什么double会出现78.000001?

  • 问题5解决方案:0.000001相当于1e-6;表示double的精确度。

代码托管

上周考试错题总结

第三周

  1. If x is an int and y is a float, all of the following are legal except which assignment statement? (如果x是一个int类型的数,y是一个float类型的数,下面所有赋值语句中哪个不合法?)
    • A .y = x;
    • B .x = y;
    • C .y = (float) x;
    • D .x = (int) y;
    • E .all of the above are legal (以上全部合法)
  • 正确:B。错题原因:int小于float,所以不合法。
  1. What value will z have if we execute the following assignment statement? int z = 50 / 10.00; (如果我们执行下面的赋值语句,z将得到什么值?)
    • A .5
    • B .5.0
    • C .50
    • D .10
    • E .none of the above, a run-time error arises because z is an int and 50 / 10.00 is not (以上皆错,因z是一个整型数而50 / 10.00不是,会产生运行时错误)
  • 正确:E。错题原因:计算结果为5.00,但是因为z为int,所以不能转换。
  1. In order to create a constant, you would use which of the following Java reserved words? (为了创建一个常量,你会使用下列Java保留字中的哪一个?)
    • A .private
    • B .static
    • C .int
    • D .final
    • E .class
  • 正确:D
  1. 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
  1. Every Iterator(迭代器) has a hasNext( ) method。
  2. 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。别名是指两个不同的引用变量引用同一个物理对象。解析:An "alias" occurs when there are two or more references to the same physical object so that by following either reference, one can read/write/modify the object(当同一个物理对象有两个或多个引用时,就会出现“别名”,这样通过遵循其中一个引用,就可以读写/修改该对象)。
  1. These two ways of setting up a String yield identical results:

a) String string = new String("123.45");

b) String string = "" + 123.45;
A .true B .false

  • 正确:true。
  1. 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(可以在一个范围内生成随机的INT、浮动和INT)
    • D .you can initialize and reinitialize Random generators(
      您可以初始化和重新初始化随机生成器)
    • E .all but answer B
  • 正确:E。

第二周

  1. When executing a program, the processor reads each program instruction from main memory (当执行一个程序时,处理器从主储存器读取每个程序指令)
  2. 储存容量的计算
    • Bit 比特,一个二进制位,通信常用的单位。
    • Byte 字节,由八个二进制位组成,是计算机中表示存储空间的最基本容量单位。
    • K 千,存储空间的容量单位, kilobyte,1K=1024字节。
    • M 兆,megabyte,1M=1024K。
    • G 吉,gigabyte,1G=1024M。
    • T 太,1T=1024G。
  3. Volatility is a property of RAM(易变性是随机存储器的性质)
  4. Java is an example of a(n) high-level language (高级语言)and fourth generation language (第四代语言)
  5. A unique aspect of Java that allows code compiled on one machine to be executed on a machine of a different hardware platform is Java's bytecodes (Java的独特之处在于其字节码,它允许在一台机器上编译的代码在不同的硬件平台上执行)
  6. The word "Public" is a reserved word. ("Public"是一个保留字。)。
  • 错误。因为public为保留字,不大写
  1. In a Java program, dividing by 0 is a syntax error. (在Java程序中,除以0是一个语法错误。)。
  • 错误。他是一个运行错误

原因:

  • 我认为第二章的错题错的很基础,我应该好好读课本,把课本上的知识掌握
  • 我认为第三章出现了很多专有名词,我需要好好加强英语功底。
  • 还有一些错题没有完全总结,因为是马虎出的错误或者是与上面类似的错误或者是英文不能够理解出现错误。

结对及互评

评分标准

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

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

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

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

    • 一周提交次数少于20次的不加分
  6. 其他加分:

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

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

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

    • 博客内容需要精华,不要假大空的话语。
    • 博客的排版也需要学习,简单整洁可以学的更好
  • 代码中值得学习的或问题:

    • 在一次作业中,book、bookshelf两个函数的运用,我掌握的不是很熟练,看了陆彦杰、彭淼迪同学的代码,有所感悟。
    • 2307
  • 基于评分标准,我给本博客打分:16分。得分情况如下:

    • 正确使用Markdown语法 1分
    • 模板中的要素齐全 1分
    • 教材学习中的问题和解决过程 3分
    • 代码调试中的问题和解决过程 5分
    • 感想,体会不假大空 1分
    • 排版精美的 1分
    • 进度条中记录学习时间与改进情况 1分
    • 点评认真,能指出博客和代码中的问题 1分
    • 错题学习深入 1分
    • 结对学习情况真实可信 1分
  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

  • 结对学习内容

    • 一起讨论代码,讨论不懂的问题。
  • 上周博客互评情况

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

本周在解决了基本设施问题后,可以很快的运用命令行,掌握软件方法,将更多的学习放在代码研究上。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 69/200 2/2 30/20 基础扎牢
第二周 529/600 3/4 25/25 学习基本代码编写

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:25小时

  • 改进情况:编写简单代码已经基本熟练,一些包含主函数、子函数的代码仍然需要练习。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料