大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 算 术运算

程序的目的简单的说就是运算、运算还是运算,加减乘除这类的动作是少不得的,在Java中提供运算功能的就是运算符(Operator),例如与算术相关的加(+)、减(-)、乘(*)、 除(/)这类的运算符,另外还有一个也很常用的余除运算符(%),这类以数学运算为主的运算符,称之为“算术运算符”(Arithmetic operator)

这类运算符的使用基本上与我们学过的加减乘除一样,也是先乘除后加减,必要时加上括号表示运算的先后顺序,例如这个程序码会在主控台显示7:
System.out.println(1 + 2 * 3);

编译器在读取程序码时,是由左往右读取的,而初学者往往会犯一个错误,例如(1+2+3) / 4,由于一般习惯将分子写在上面,而分母写在下面的方式,使得初学者往往将之写成了:
System.out.println(1+2+3 / 4);

这个程序事实上会是这样运算的:1+2+(3/4);为了避免这样的错误,在必要的时候为运算式加上括号才是最保险的,例如:
System.out.println((double)(1+2+3) / 4);

注意在上面的程序码中使用了double限定类型转换,如果不加上这 个限定字的话,程序的输出会是1而不是1.5,这是因 为在这个Java程序中,1、2、3、4这四个数值都是整数,当程序运算后,会自动去除小数点之后的数字再进行输出,而加上double限定,表示 要运算后的值转换为double数据类型,如此小数点之后的数字才不会被去除。

同样的,看看这段程序会印出什么结果?
int testNumber = 10;
System.out.println(testNumber / 3);

答案不是3.3333,而是3,小数点之后的部份被自动消去了,这是因为estNumber是整数,而除数3也是整数,运算出来的程序被自动转换为整数 了,为了解决这个问题,您可以使用下面的方法:
int testNumber = 10;
System.out.println(testNumber / 3.0);
System.out.println((double) testNumber / 3);

上面这个程序片段示范了两种解决方式:如果运算式中有一个浮点数,则程序就会先转换使用浮点数来运算,这是第一段程序所使用的方式;第二个方式称之为“限 定类型转换”,您使用double告诉程序先将testNumber的值转换为double,然后再进行除法运算,所以结果会是正确的3.3333;类型 转换的限定关键字就是声明变量时所使用的int、float等关键字。

当您将精确度小的数据类型(例如int)指定给精确度大的数据类型(例如double),这样的指定在精确度并不会失去,所以这样的指定是可行的。

Java对于程序的安全性要求极高,类型转换在某些情况一定要明确指定,就是在使用指定运算符时,将精确度大的指定给精确度小的变量时,由于在精确度上会 有遗失的现象,编译器会认定这是一个错误,例如:
int testInteger = 0;
double testDouble = 3.14;
testInteger = testDouble;
System.out.println(testInteger);

这段程序在编译时会出现以下的错误讯息:
possible loss of precision
found   : double
required: int
testInteger = testDouble
               ^
1 error

如果您确定这是您要的结果,您必须明确加上转换的限定字:
testInteger = (int) testDouble;

%运算符是余除运算符,它计算除法后的余数,一个使用的例子是数字循 环,假设有一个立方体要进行360度旋转,每次在角度上加1,而360度后必须复归为0,然后重新计数,这时您可以这么撰写:
count = (count + 1) % 360;