初学JAVA 编程用while循环语句计算 1+1/2!+1/2!....1/20!之和;
public classPcounter {
public static void main(String[]args) {
// TODO 自动生成的方法存根
double i=1,j=1;
double sum=0;
while(i<20){
sum += 1/j;
j=j*(i+1);
i++;
}
System.out.println("和为:" + sum);
}
}
第一次编译时:i j 使用的是int 类型,导致sum的结果一直为 1.0
再改为double后解决问题。google后应该是自动数据类型转换的问题,教材并没有提及这个问题,还有些题目涉及输入的问题,java里不是用cin给变量赋值,只能等之后慢慢的学习才能解决问题。
题目来自《java从入门到精通》清华大学出版社 第四章 实践与练习
以下摘自微学院:http://www.weixueyuan.net/view/5957.html
自动数据类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int-> long -> float -> double
运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:
操作数1类型 | 操作数2类型 | 转换后的类型 |
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
强制数据类型转换
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。
1. publicclassDemo {
2. publicstaticvoidmain(String[]args){
3. int x;
4. double y;
5. x =(int)34.56+(int)11.2; // 丢失精度
6. y =(double)x +(double)10+1; // 提高精度
7. System.out.println("x="+ x);
8. System.out.println("y="+ y);
9. }
10.}
运行结果:
x=45
y=56.0
仔细分析上面程序段:由于在 34.56 前有一个 int 的强制类型转化,所以 34.56 就变成了 34。同样 11.2 就变成了 11 了,所以 x 的结果就是 45。在 x 前有一个 double 类型的强制转换,所以 x 的值变为 45.0,而 10 的前面也被强制成 double 类型,所以也变成 10.0,所以最后 y 的值变为 56。