动手动脑

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

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

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

输出结果:

原因:在java+可以做为连接符和运算符。

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

public class TestDouble {

public static void main(String[] args) {

// TODO Auto-generated method stub

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

           }

 }

运行结果:

为什么double类型的数值进行运算得不到“数学上精确”的结果?

请通过互联网查找资料,或者是阅读相关计算机教材,解决这个问题。

提示:这个问题,与浮点数在计算机内部的表示方法有关系。可以使用这个知识在搜索引擎中查找相关资料

答:事实上浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。 可以考虑采用一些替代方案来实现。如通过 String 结合 BigDecimal 或 者通过使用 long 类型来转换。还可以用使用BigDecimal类来实现。我们知道在计算机中浮点数的表示方法是由一个整数(即尾数)乘以一个基数(计算机中一般为2)的整次幂得到。(类似于科学计数法,科学记数法基数为10)float的内存结构为:符号位表示正负,1位 指数位,8位 尾数位,32位(符号位1表示负,0表示正)指数是以2为底的,范围是 -128 到 127,如果超过了127,则从-128开始计。 即:127+1=-128尾数都省去了第1位的1,所以在还原时要先在第一位加上1。它可能包含整数和纯小数两部分,也可能只包含其中一部分,视数字大小而定。对于带有整数部分的浮点数,其整数的表示法有两种,当整数大于十进制的16777215时使用的是科学计数法,如果小于或等于则直接采用一般的二进制表示法。科学计数法和小数的表示法是一样的。小数部分则是直接使用科学计数法,形式是X * ( 2 ^ n )。这样就导致浮点类型在计算机的存贮中无法精确表示。

3仔细阅读示例: EnumTest.java,运行它,分析运行结果?

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

public static void main(String[] args) {

Size s=Size.SMALL;

Size t=Size.LARGE;

//st引用同一个对象?

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

结果:

枚举类型

enum Size{ SMALL , MEDIUM , LARGE }

使用:

Size s=Size.SMALL;//从字串转换为枚举

Size t=Size.valueof(SMALL”);

枚举值的foreach迭代

private enum MyEnum{ONE, TWO, THREE}

public static void main(String[] args) {

for(MyEnum value:MyEnum.values()){

System.out.println(value);

}

}

原文地址:https://www.cnblogs.com/sunmei20142925/p/4856056.html