zoukankan      html  css  js  c++  java
  • 课后作业

    1、动手动脑

    阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗?

    public class EnumTest {
    
        public static void main(String[] args) {
            Size s=Size.SMALL;
            Size t=Size.LARGE;
            //s和t引用同一个对象?
            System.out.println(s==t);  //
            //是原始数据类型吗?
            System.out.println(s.getClass().isPrimitive());
            //从字符串中转换
            Size u=Size.valueOf("SMALL");
            System.out.println(s==u);  //true
            //列出它的所有值
            for(Size value:Size.values()){
                System.out.println(value);
            }
        }
    
    }
     enum Size{SMALL,MEDIUM,LARGE};
    运行结果:
    false
    false
    true
    SMALL
    MEDIUM
    LARGE

    结论:枚举类型是引用类型,不属于原始数据类型,它的每个具体值都引用一个特定的对象,相同的值则引用同一个对象。可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

    2、动手动脑

    阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

    反码:对正数,其反码与原码相同,也与补码相同。对负数,其反码等于原码除符号位外,按位求反。
    原码:一般将数的二进制位最高位表示符号,对正数,该位取0,对负数,该位取1。而数值部分保持数的原有形式。这样所得结果为该数的原码表示。
    例,x=+1001010,y= -1001010,z= -1110(= -0001110)。当原码为8位时,x、y和z的原码分别是:
    [x]原=01001010;
    [y]原=11001010;
    [Z]原=10001110.
    补码:对正数,补码同原码。对负数,负数的补码等于其原码除符号位外按位“求反”(1变0,0变1),末位再加1。
    例如,x=+0101001,[x]补=[x]原=00101001
    例如,y=-0001100,[y]原=10001100,[Y]补=11110011+1=11110100。

    package n;
    public class MM {
      
           public static void main(String[] args) {
               int m1=2;
               int m2=-2;
               System.out.println(Integer.toBinaryString(m1));
               System.out.println(Integer.toBinaryString(m2));
    }
    }
    运行结果:
    10
    11111111111111111111111111111110

    在Java中,二进制正数采用原码,负数采用补码。

    3、动手实验

    请运行以下代码(TestDouble.java)

    package mm;
    public class TestDouble {
    
        public static void main(String args[]) {
            System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
            System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
            System.out.println("4.015 * 100 = " + (4.015 * 100));
            System.out.println("123.3 / 100 = " + (123.3 / 100));
        }
    }
    运行结果:
    0.05 + 0.01 = 0.060000000000000005
    1.0 - 0.42 = 0.5800000000000001
    4.015 * 100 = 401.49999999999994
    123.3 / 100 = 1.2329999999999999

    使用double类型的数值进行计算, 其结果为什么不是精确的?

    我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误

    差,无法得到“数学上精确”的结果。

    4、动手动脑

    以下代码的输出结果是什么?

    package n;
    public class MM{
        public static void main(String[] args) {
              int X=100;
              int Y=200;
              System.out.println("X+Y="+X+Y);
              System.out.println(X+Y+"=X+Y");
        }
    }
    运行结果:
    X+Y=100200
    300=X+Y

    为什么会有这样的输出结果?

    在Java中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出。如果先有变量的加减运算再有字符串,那么会先从左到右先计算变量的加减运算,输出运算结果。

    5、动脑动手:

    运行下述代码,输出结果是什么?

    package n;
    public class MM {
          private static  int value=1;
           public static void main(String[] args) {
             int value=2;
             System.out.println(value);
    }
    }
    运行结果:
    2

    Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

    package n;
    public class MM {
           int a=1;
           public static void main(String[] args) {
               MM m=new MM();
               B b=new B();
           int a=2;
           System.out.println("main().a="+a);
           m.A1();
           b.A2();
    }
            public void A1(){
             int a=4;
            System.out.println("m.A1().a="+a);
             }
    }
    class B{
        void A2(){
           int a=3;
           System.out.println("b.A2().a="+a);
         }
    }
    运行结果:
    main().a=2
    m.A1().a=4
    b.A2().a=3
  • 相关阅读:
    Python 冒泡排序
    编程规范之注释篇
    编程规范之变量命名篇
    安装Django
    字典&列表的拓展理解
    小球落地
    Python结合sql登陆案例
    面向对象:两手交换牌
    每日一题(一)
    Web应用之LAMP源码环境部署
  • 原文地址:https://www.cnblogs.com/MoooJL/p/11552122.html
Copyright © 2011-2022 走看看