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

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

教材学习内容总结

  1. import 声明,指定程序中要用的包和类。
  2. String类,创建对象,对字符串进行编辑。
  3. Random类,取随机数。
  4. Math类,有关数学的计算。
  5. 格式化输出:NumaberFormat类,DecimalFormat类,printf方法
  6. 枚举型,作用之后会有。 枚举型作用
  7. 包装器类

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

  • 问题1:实例化。 在书P35 Math类的介绍中提到了静态方法,不需要实例化。

  • 问题1解决方案:参考资料:Java中什么叫实例化??
    其中形象的解释了什么叫做实例化。就是把类举个例子,给出一个对象。那么,就涉及到了新的知识。什么是静态方法动态方法
    参考资料:静态方法和实例方法的区别

    在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
    静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

    结合以前的知识,我们就会发现String是一种实例方法。而main()是典型的静态方法。

  • 问题2:书P87 有这样一句话:

    数据尾部的0(例如圆面积78.540)将不会显示。

    那么我们结合一下例3.5: 有这样一行代码:

    DecimalFormat fmt = new Decimalformat("0.###");

     我们都知道这是输出格式化的效果,那么为什么有三个#,却不会显示数据尾部的0呢? 
    
  • 问题2解决方案:
    我们可以参考这份资料。
    参考资料:decimalFormat("#","##0.00") java
    看过这个博客以后呢,我总结了两句话:
    #:如果该位四舍五入后数字为0,那么就省略这个0 ,
    0:如果该位四舍五入后没有数字,那么就自动补0。

     之后呢,我觉得要是想得出`78.540`那就可以把`#`换成`0`,所以我输入了这个代码:  
    

    DecimalFormat fmt = new Decimalformat("0.##0");

    结果呢,还是不对。然后我问了学长之后,得到了这个结论:  
    **要用#都用#,要用0都用0。**
    
    **备注**:在做后面的项目练习的时候,这**保留小数位**的题型。那么这时候我们应该用'#'还是'0' 呢?    **是0哦**
    
  • 问题3:Math.PI是个啥?

  • 问题3解决方案:这是π
    Math.E 是自然对数

  • 问题4:在格式化输出那一节,介绍了NumaberFormat类,DecimalFormat类,printf方法,那么,类和方法到底有什么区别呢?

  • 问题4解决方案:
    参考资料:java中类与方法的关系是什么?
    由资料可知,类就是一类事物的抽象,是一个模板;而方法是具体的,有具体的行为。可以好好的参考下例子,很形象。

  • 问题5:枚举型的作用

  • 问题5的解决方案: 相信很多人都不理解枚举型到底有什么用,不就是举例子数数吗?这里我在网上查到了资料。枚举类型的作用
    但是看不懂。 所以从JDK API中查询Enum
    但是不会用。 所以又从网上查了如何使用JDK API
    参考资料:JDK API从下载到使用
    然后呢,还是不太懂。 只能大致理解到他的好处,希望后续的学习能够解决现在的问题。

  • 问题6:书P84自测题SR3.21

    Math.pow(2, 4)

      我觉得是16,答案16.0  
    
  • 问题6的解决方案:于是,我查书P83 图3.5

    static double pow(double num, double power)

    注意到了,是double,输出的结果是double。这点就需要我们去仔细理解书中的例子和方法,而不是草草地打完代码就结束了。

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

  • 问题1:import 声明的简便。

  • 问题1解决方案:书P80

    如果只需要使用某个包中的一个类,最好在import声明中指出这个类;
    如果要使用两个以上的类,则使用“*”形式更好些。

    所以我们应该输入:

    import java.util.*;

  • 问题2:有关例3.5:
    DecimalFormat fmt = new Decimalformat("0.###");

  • 问题2解决方案: 编写了一个test程序。

  • 问题3 : 博客园博客markdown格式问题。

    项目符号和文字总是不在一行。很苦恼,博客看上去格式很凌乱。然后在学长的帮助下进行了各种调试。针对不同的空行,得出了不同的结果。有一天晚上很晚了偶然请教学长,学长不厌其烦的帮助我,那天确实有点影响了学长的休息。深深感谢学长帮助。最后还是博客园模板捣的鬼,当初创建博客随机选了个简约的,没想到有这么大的麻烦,例如那个大引号。换个模板就好了。

代码托管

上周考试错题总结

  • 下列哪种情况需要强制转换? D

A (使用charAt来获取字符串元素并将其存储为char类型)
B (将一个int类型的数存储为float类型)
C (将一个float类型的数存储为double类型)
D (将一个float类型的数存储为int类型)
E (以上所有情况都需要强制转换)

理解:一种更宽的类型被存储在一个更窄的类型中,是不能被强制转换的。而扩大操作,采取更窄的类型,并将值存储在更宽的类型中,是可以强制转换的。

  • 关于求余运算符%,下面哪项是正确的?
    A .(它只能执行int类型的数值,其结果是double类型的数)
    B .(它只能执行int类型的数值,其结果也是int类型的数)
    C .(它只能执行float或者double类型的数值,其结果是int类型的数)
    D .(它只能执行float或者double类型的数值,其结果是double类型的数)
    E .(它可以执行任何类型的数值,其结果始终是数值)
    理解: 我们求余运算常用的都是整数。但是不一定是。举个栗子:

0.08 / 0.03求余,余数是0.02。

这里全是double型的数。 所以'%'可以执行任何类型的运算。

  • (如果你想把"George Bush"这个值存储为字符串类型的名字,你会执行那条语句?)
    A . String name = "George Bush";
    B . String name = new String("George Bush");
    C . String name = "George" + " " + "Bush";
    D . String name = new String("George" + " " + "Bush");
    E . (上述都可以完成)

理解:根据这章对于String类的学习,我们可以知道可以通过A,B两种办法来通过定义字符串。 而C,D两个选项只不过是A,B的变形罢了。

  • int z = 50 / 10.00; (如果我们执行下面的赋值语句,z将得到什么值?)
    A . 5
    B . 5.0
    C . 50
    D . 10
    E . (以上皆错,因z是一个整型数而50 / 10.00不是,会产生运行时错误)

理解:已经定义了z是个int型,可是结果却是double型,相互矛盾。输出错误。

  • (Boolean类型的变量将被存储为0或1)
    A . true
    B . false

理解:书上的原句。在C语言中,c++和c#布尔值被实现为只存储0或1的int变量但是在Java中,语言的作者选择了真实和错误的布尔文字,因为这被认为是语义上更容易理解的(而且更安全)。

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

这星期确实有很多的东西需要学习,不仅是各种各样的类和方法,还有实验和各种调试。但是一步步走到现在,并且代码也突破到了1000大关,心里的成就感还是很强的。尽管测验的成绩还是不理想,但是我认为实践更加重要。现在我们正在系统的学习Java程序的编写,我也期待自己以后能独自编写出自己的项目。共勉!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/1 20/20
第二周 300/500 1/2 18/38
第三周 500/1091 1/3 20/58

参考资料

原文地址:https://www.cnblogs.com/gk0625/p/8635798.html