大道至简:软件工程实践者的思想——第二章感想和课后思考

动手动脑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 , falsetrue , SMALL , MEDIUM , LARGE。

你能得到什么结论?你掌握了枚举类型的基本用法了吗?

Java中,枚举类型本质上其实就是一个类,枚举中的常量都是该枚举类型的实例。虽然枚举类型有一些限制,比如不能再派生出子枚举类型,不能调用构造函数,不过我们仍然可以在枚举类型中定义构造函数、字段和方法,枚举类型的常量以字符串的形式顺序储存,枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象,枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。

动手动脑2:看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

char 8位二进制数范围是-2的7次方到2的7次方-1之间,byte 8位带符号整数-128到127之间的任意整数,short 16位无符号整数-32768到32767之间的任意整数,int 32位带符号整数-2的31次方到2的31次方-1之间的任意整数,long 64位带符号整数-2的63次方到2的63次方-1之间的任意整数,float 32位单精度浮点数,double 64位双精度浮点数。

结论是:Java会自动完成从低级类型向高级类型转换,即取值范围相对较小的数据类型可以转换成取值范围相对较大的数据类型,例如char可以转换成double。

动手实验:请运行以下代码(TestDouble.java

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));

    }

}

分析:计算机只能识别二进制,一切的数据最后都要转换为二进制。例如源程序中的2.4是十进制的,要转换为二进制,但2.4 的二进制不是精确的2.4,只是接近2.4,实际为2.3 999 999 999 999 999,浮点数由两部分组成:指数和尾数,再进行浮点数的二进制与十进制的转换时,浮点数参与了计算,那么转换过程就变的不可预测,并且变得不可逆。

 

结论:在计算机内,定点数有3种表示法:原码、反码和补码。反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。所谓原码就是二进制定点表示法,即最高位为符号位,0”表示正,“1”表示负,其余位表示数值的大小。

二:编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。
根据原有的代码加入加减乘除的代码,代码如下:


import javax.swing.JOptionPane;
class Tset {

            public static void main(String[] args) {
                                     // TODO 自动生成的方法存根
             String firstNumber,secondNumber;
              int number1,number2,jia,jian,cheng,chu;
                                   // 输入第一个string型的数;
              firstNumber =JOptionPane.showInputDialog( "请输入第一个数" );

                                    // 输入第二个string的数;
             secondNumber =JOptionPane.showInputDialog( "请输入第二个数" );

                                              // 指针
                         number1 = Integer.parseInt( firstNumber );
                         number2 = Integer.parseInt( secondNumber );

                                // 数的算法
                      jia = number1 + number2;
                      jian = number1 - number2;
                     cheng = number1 * number2;
                     chu = number1 / number2;
                        JOptionPane.showMessageDialog(null,"和为: "+jia+" 差为:"+jian+" 积为:"+cheng+" 商为:"+chu,
                      "Results",JOptionPane.PLAIN_MESSAGE);//在窗口上输出结果
                 System.exit(0);//释放空间

            }

}

但是这里有的是int型的,商换算出来的结果有一定的误差。

原文地址:https://www.cnblogs.com/hanzhu/p/4858326.html