黑马程序员技术交流社区
标题:
请大家帮忙改错
[打印本页]
作者:
刘永贵
时间:
2013-6-21 21:15
标题:
请大家帮忙改错
本帖最后由 孙百鑫 于 2013-6-22 10:03 编辑
下面是我编写的代码,但是运行的时候报错了 请大家帮我看看
public class PI {
public void main (String args[ ] ) {
long n=1;
int pi=2;
while (n>10000000) {
pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);
n++;
}
System.out.println ("n="+n) ;
}
}
作者:
王靖远
时间:
2013-6-21 21:19
pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);
这里括号什么的少了吧的看不懂是什么
作者:
刘利民
时间:
2013-6-21 21:41
我觉得作者目的没有明确,还有就是不细心,多加努力啊:
1.首先,你问问题根本就没说目的,一个程序写出来总有点需求,不然我们怎么改
2.其次,要改对还不容易,但又怕改不到你说的要求。
3.再次,你输出的语句,输出n有意义吗?况且n定义在while语句的前面,n<10000000永远成立,while语句内部的代码永远执行不到,改完之,n还是等于1.
4.最后,pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);这段语句根本就没用到,你是什么目的。
作者:
x.love
时间:
2013-6-21 22:23
叫我情何以堪,while里面的代码怎么可能执行到呀!
作者:
王磊
时间:
2013-6-21 22:39
楼主是要求圆周率吧。帮你简单改了下。
long n=1;
double pi=2;
while (n<10000000) {
pi=(double)(pi*(2*n)/(2*n-1)*(2*n)/(2*n+1));
n++;
}
System.out.println ("pi="+pi) ;
复制代码
楼主估计是想取到尽量多的位,建议楼主用StringBuilder来做存储,并在循环结束后一次打印出。
这个是按照楼主的思路写的,不过double精度的变量位数有限的,也就是说不能达到楼主的目标要求。
希望有所帮助
作者:
王磊
时间:
2013-6-21 22:42
王磊 发表于 2013-6-21 22:39
楼主是要求圆周率吧。帮你简单改了下。楼主估计是想取到尽量多的位,建议楼主用StringBuilder来做存储,并 ...
在补充一下,因为double精度有限,所以你做循环乘法的时候,每一次的结果都会损失精度,按照楼主的思路去求的话,我测试了一下,基本到第6位,就已经不符合圆周率的要求了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2