我刚刚开始编程,需要为类使用序列中的前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);
}
}
}
答案 0 :(得分: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
。
答案 1 :(得分:-1)
我不知道这是计算PI的方法,但你肯定应该初始化你的浮点数而不是1。 e.x
float nextTerm = 1.0;而不是int nextTerm = 1.0。
为每个变量执行此操作以确保功能