使用java来跟踪序列的前8个项的pi

时间:2017-01-18 21:33:28

标签: java pi

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

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);
        }   
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

的使用

答案 1 :(得分:-1)

我不知道这是计算PI的方法,但你肯定应该初始化你的浮点数而不是1。 e.x

float nextTerm = 1.0;而不是int nextTerm = 1.0。

为每个变量执行此操作以确保功能