zoukankan      html  css  js  c++  java
  • 20182316胡泊 第2,3周学习总结

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

    教材学习内容总结

    第二章

    • 字符串
      • print与println区别:换行
      • 字符串连接:(字符串不能占用多行) +
      • 转义字符:
    • 变量
      • 当未给出初值就使用变量,那么在编译时会报错
      • 而c语言则是会给一个随机值,就看你能不能发现了(所以这一点还是java比较人性化)。
    • 赋值
      • 赋值只能在同数据类型之间进行。
        • 但是后面有赋值类型的数据类型转换,应该算是一个特例吧。
    • 常量
      • 命名:常常字母大写,中间用 _ 分隔
      • final int MAX_NUMBER = 435;
      • 常量在其存在期间始终保持一个值(类似于C语言的const常量吧)。
    • 数据类型
      • byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
      • short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
      • int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
      • long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
      • float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F(七位有效数字)
      • double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。(十五位有效数字)
      • boolean:只有true和false两个取值。
      • char:16位,存储Unicode码,用单引号赋值。
    • count++ 与 ++count的区别
      • count++:先执行语句,再自增。
      • ++count:先自增,再执行语句。
      • 单独写时没有区别,当放入语句中有区别。
    • 数据转换
      • 赋值转换:仅能实现加宽转换,(自动)。
      • 提升:整形除以浮点型,整形自动转化为浮点型,再进行运算。
      • 强制类型转换:result=(float) total/count;
        • 强转的优先级比除法高。
      • 布尔值不能转换为其他任意一种数据类型,反之亦然。
    • Scanner类
      • import java.util.Scanner;:在类定义之前,告诉系统要使用Scanner类。
      • Scanner scan =new Scanner(System.in);:声明创建了一个变量scan,代表一个Scanner对象。
      • message=scan.nextLine; :将下一行输入的一行文本作为字符串变量保存。

    第三章

    • String +变量:变量表示的不是对象,而是对象的地址。所以可以把变量看作是一个指针。
    • 别名:两个变量同时指向同一个对象,则这两个变量互称为该对象的别名。
    • 下标(index):(类似于C语言中字符串的下标 a[0]。)
    • String类
      • .concat(""); 连接。
      • .toUpperCase();小写转为大写。
      • .replace('old','new');转换。
      • .substring(a,b);截取从第a位到第b位的字符串,返回。
    • 类库:每个类库都属于一个包,类库用包来组织
    • import声明:如果想使用类库中的类,要通过 import java.包名.类名 或者import.java.包名.*(在要用到多个类时)。
    • Random类:属于java.util包,伪随机数生成。
      import java.util.Random;
      `
      `
      Random generator = new Random();
      `
      `
      int num1;
      num1=generator.nextInt(10);//在0~9之间产生一个随机数。
      num1=generator.nextInt(20)+5;//在5~24之间产生一个随机数。
      num2=generator.nextFloat();//在0~1之间产生随机数。
      
    • printf方法
      • 为了在将已有C语言程序移植到java平台时更方便。
      • System.out.printf("ID:%5d,name:%s",id,name);
    • 枚举类型(类型安全的)
      • enum grade(类型名){A,B,C,D,E}
      • grade stu1(变量名)=grade.A;

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

    • 问题1:由int/long到float的转换明明是加宽转换,为什么会造成数据丢失?

    • 问题1解决方案:虽然由int、long到float是加宽转换,但那是因为float有小数位,而float的有效位数为7位,int与long都要远远超过这个范围,因此会有数据丢失的问题。

    • 问题2:语句:println("you entered: ""+ message + " "");

    • 问题2解决方案:

      • "you entered: "" : "表示左边的双引号,两边的“表示打印字符串。
      • +message+ :表示打印message。
      • " "" :表示打印右边的双引号
    • 问题3:compareTo(String str)的返回值如何计算。

    • 解决方案:compareTo从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型

      • 1.当两个比较的字符串是英文且长度不等时,
        • 1)长度短的与长度长的字符一样,则返回的结果是两个长度相减的值
        • 2)长度不一样且前几个字符也不一样,从第一位开始找,当找到不一样的字符时,则返回的值是这两个字符比较的值
      • 2.当两个比较的字符串是英文且长度相等时
        • 1)多个字符,第一个字符不同则直接比较第一个字符
        • 2) 多个字符,第一个字符相同则直接比较第二个字符,以此类推

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

    • 问题1:在进行有输入的程序单步调试时,直接调试会出现无法识别命令。

    • 问题1解决方案:仔细阅读了课代表的总结的教程,建立了一个监听的窗口,通过另一个窗口键入数值。
      方法链接

    • 问题2:在运行书上的程序3.1时,输入了.substring(3,30)语句时,程序报错。

    • 问题2解决方案:substring是返回字符串中从第a个开始一直到第b-1个结束的字符串,而我编的程序输入的字符串没有30位所以运行时报错。

    • 问题3:缩窄转换

    • 问题3解决方案:将变量定义为double,同时输入时用scan.nextDouble.

    • 问题4:问题2:吃回车问题(可能是吧,反正C语言是的)
      image

    • 问题4解决方案:当要输入字符或字符串时,如果前面不是字符或字符串类型的输入,那么就会出现吃回车问题,此时就多打一个op=scan.nextLine();将前者留在键盘缓冲区的回车吃掉,以便进行下一步的输入。

    • 问题5:return只能返回一种类型的数据。
      image

    • 问题5解决方法:我使用的是double来返回数据,而在程序中为了其实用性,增加了纠错,比如“can not divide 0","unrecognizeable demand"等等,针对这个问题,有两种解决方法:

      • 将返回的double型浮点数转化为字符串
      • 将报错语句换成-1,-2等数字,作为返回值返回。
    • 问题6:在将整形转换为字符串时查到了String.valueof()和Integer.toString()两个方法,有区别吗?

    • 解释:

      • Integer.toString()方法
        • 作用:该方法返回指定整数的有符号位的String对象,以10进制字符串形式返回,就好像将该整数值作为参数赋予 toString(int) 方法一样。
        • 此外,Integer.toString(a,b) :将十进制的a转换为b进制。
      • valueof()与Integer的不同:
        • 1、valueof()当输入的为null即空指针时,会返回字符串“null”,而Integer.toString则会报错。
        • 2、vlaueof()有多重用法,可以将int、float、double、boolean等等形式转化为String。

    代码托管

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

    上周考试错题总结

    1、 Of the following types, which one cannot store a numeric value? (在下列数据类型中,哪一个不能存储一个数值型数据?)

    A .int
    B .byte
    C .float
    D .char 正确
    E .all of these can store numeric values (以上所有类型都可以存储数值型数据)
    解析:char类型可以存储数字,但数字是字符型的。

    2、Given the following assignment statement, which of the following answers is true regarding the order that the operators will be applied based on operator precedence?
    a = (b + c) * d / e - f; (下面给定的赋值语句中,基于运算符优先级,对于将被执行操作的顺序,哪一个答案是正确的?)

    A ., /, +, -
    B .
    , +, /, -
    C .+, *, /, - 正确
    D .+, /, *, -
    E .+, -, *, /
    解析:没有审题,以为是普通的优先级,结果是要看运算式子的。

    3、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不是,会产生运行时错误) 正确
    解析:z是一个整型数而50 / 10.00不是,会产生运行时错误,由float转为int型时,会由于缩窄转换而报错。

    4、A variable of type boolean will store either a 0 or a 1. (Boolean类型的变量将被存储为0或1)

    A .true
    B .false 正确
    解析:在java中,boolean存储为true和false,而不是0和1。

    5、As in the other members of the C family of languages (C, C++, C#), Java interprets a zero value as false and a non-zero value as true.

    A .true
    B .false
    解析:虽然C族确实以这种方式解释了零和非零值,但是Java要求使用保留常量true和false,或者使用关系和/或逻辑运算符进行逻辑计算。

    结对及互评

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

      • 对上周的错题进行了仔细的更正和课后复习,我对上周考试题的复习较为草率。
      • 博客撰写详细,有理有据。
      • 在撰写博客的过程中可以加入更多自己的理解。
    • 代码中值得学习的或问题:

      • 代码风格良好,便于阅读。
    • 基于评分标准,我给本博客打分:13分。得分情况如下:

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

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

    3. 教材学习中的问题和解决过程(3分)

    4. 代码调试中的问题和解决过程(3分)

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

    6. 其他加分:

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

    点评过的同学博客和代码

    • 本周结对学习情况

    • 学习内容

      • Scanner类读输入数据
      • Random类,String类,Math类中方法的使用
      • 格式化输出
      • 自定义类

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

    • 感觉最近打代码,比之前好了很多,对代码和文件有了更加深层的理解,能够稍微理解linux以及java的尿性了,将其与Windows上的各种操作分离开来。
    • 程序的错误有时就是很细小,当编译出现错误时,我可能通过一种或一些奇怪的方法误打误撞编译成功,甚至运行成功了,但是这些小小的问题背后可能有很多深层的知识,如果不想办法解决,就只能一知半解,所以要有探索精神。
    • 本来以为java学习基本上步入正轨,但编写类有给了我当头一棒,太难了。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 10000行
    第一周 93/93 3/3 20/20
    第三周 880/800 4/4 40/40
    • 计划学习时间:50小时

    • 实际学习时间:40小时

    参考资料

  • 相关阅读:
    noip2014Day2解题报告
    浴谷八连测R4
    pythonic-让python代码更高效
    java源码学习(一)String
    湖北省汉十高速公路项目接近尾声,所想所感真的值得写写
    jQuery插件ImageBox的使用
    那位兄弟帮忙写个正则表达式哦!急用阿
    如何在页面调用JS函数的代码
    控件的EnableViewState详细分析
    某人给gridview如此集中数据源,我只用过几个,晕倒!!
  • 原文地址:https://www.cnblogs.com/hp12138/p/11544635.html
Copyright © 2011-2022 走看看