我正在学习Java,我的任务之一就是使用教授给我们的某个公式来近似pi,我们必须使用for循环。方向对我来说不是很清楚,但我的程序非常接近,但我无法弄清楚为什么pi的值接近而不是每个间隔应该是什么。
这是我执行该程序的指示:
(计算π)您可以使用以下公式近似π: pi + = sign /(2 * i - 1.0);其中i是for循环中变量的名称,pi是π的变量的名称,并且sign在声明时的初始值为1,并且for循环中的>设置为等于负的本身。确保使用for循环>进行此分配。 for循环的起始值应为2,当i小于或等于100000时,结束值应为>。如果pi除以10000的值为零,则> pi应为(4 * pi)。
这是我提出的代码。
public class Ch4PA1
{
public static void main(String[] args) {
//Declarations
double pi = 1;
double sign = 1;
for (int i = 10000; i <= 100000; i += 10000)
{
pi = 3.14159265359;
sign = -2;
pi += sign / (2 * i - 1.0);
System.out.println("i : " + i + " The PI is " + pi);
}
}
}
我只是无法弄清楚我做错了什么,我已经在这个程序上工作了大约10个小时,而且最终让我感到沮丧,因为他试图弄明白。
答案 0 :(得分:0)
回头看一下说明......他们说“......声明时声明初始值为1,并且for循环中的&gt;设置为等于其自身的负数”。你正在设置
sign = -2;
每次迭代。
他们还说“for循环的起始值应为2 ......”。
for (int i = 10000; i <= 100000; i += 10000)
使for
循环的起始值为10000。
答案 1 :(得分:0)
public class Ch4PA1
{
public static void main(String[] args) {
//Declarations
double pi = 1;
double sign = 1;
for (int i = 2; i <= 100000; ++i) //Switched the starting value to 2, and the increment to 1
{
pi = 3.14159265359;
pi += sign / (2 * i - 1.0);
if (sign > 0){ //you were constantly doing a -2 as oppose dto switching what the sign currently is. Notice I do it after your sign calculation so that it switches the sign AFTER the first iteration as instructed.
sign = -1;
}
else sign = 1;
System.out.println("i : " + i + " The PI is " + pi);
}
}
}
答案 2 :(得分:0)
根据我可以理解的问题,sign在声明时的初始值为1,而for循环中的初始值设置为等于其自身的负值。
pi += (-sign) / (2 * i - 1.0);
for循环定义应该更像下面的
for(int i=2; i<=100000 ; i++)
我仍然不明白你在每次循环后将循环变量i增加到10000的问题和原因。
循环中也应该有一个IF条件,如下所示
if(pi/10000)
pi *= 4