2017-01-18 90 views
-3

我刚刚开始编程,需要为类使用序列中的前8个项来近似pi进行分配。我需要通过创建一个初始值为1的变量'nextTerm',初始值为1的变量'denominator'以及初始值为0的变量'series'来实现这一点。当我运行它时,我得到第一项,但只有它显示一行零。我真的不知道我在做什么。使用java来近似pi与序列的前8个项

public class ApproxPI 
{ 
    public static void main(String[] args) 
    { 
     int nextTerm = 1; 
     int denominator = 1; 
     int series = 0; 

     for (int denominator = 1; denominator <= 8; denominator++) { 
      series = ((-1 * ((-1 * nextTerm)/denominator)) * 4); 
      System.out.println("Pi is approximately" + series); 
     } 
    } 
} 

回答

-1

我不知道这个方法是计算PI,但是你一定要初始化浮动1.0,而不是1 e.x

浮动nextTerm = 1.0;而不是int nextTerm = 1.0。

这样做对每一个变量,以确保功能

+0

这种解释缺乏解释为什么'int'计算不起作用,并且应该推荐'double'而不是'float'。它也错过了“nextTerm”的滥用。 –

0

你为什么不更新nextTerm过?它将始终等于1,int,以及您显示的代码。所以,你的循环将等同于:

series = (-1 * ((-1 * 1)/denominator))/4; 

或等价

series = (-1 * (-1/denominator))/4; 

series = (1/denominator)/4; 

在每次通过,因为它是int算术其扔掉分数:

(1/1)/4 => 1/4 => 0 
(1/2)/4 => 0/4 => 0 
(1/3)/4 => 0/4 => 0 
. . . 
(1/8)/4 => 0/4 => 0 

不要使用int算术。不要使用float,也可以使用double来表示变量和文字。您将无法仅使用int值来计算π。

而且,即使你说对了,你的输出看起来是这样的:

Pi is approximately3 
Pi is approximately1 
Pi is approximately4 
Pi is approximately1 
Pi is approximately5 
. . . 

这可能不是正是你想要什么。

这种算法的手动演练我被称为“铅笔测试”。用(虚拟)铅笔和纸准确地遵循逻辑,看看它究竟做了什么,而不是你认为它的作用。

您不需要声明和初始化denominator两次。你确实需要修复nextTerm的使用。