for 循环中 int 的值不变
Value of int doesn't change in for loop
我正在 Java 中构建一个简单的 class,用于计算 Pi 的值,并在其旁边打印 Pi 的实际值。
该程序的输入是一串自然数(大于0),用于确定计算的精度。
这是我的代码:
public class Pi {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);
}
(*出于某种原因,文本中仅此处缺少右括号)
问题是变量 "myPi" 只在 for 循环的第一次迭代中改变。
例如,对于输入 4 (N=4),结果将是 4.0 而不是 3.1....
找不到这个问题的解决方案,谢谢!
(1/((i*2)+1))
上述表达式在除 i == 0
之外的所有情况下都被计算为 0
,因为它是一个整数除法并且期望值是一个分数,其计算结果为 0
您需要使用浮点运算才能获得浮点值。
(1.0/((i*2)+1)) <-- Note the 1.0 here
如果你想要一个双精度值作为一个操作的结果,至少一个操作数必须是双精度的。
试试这个
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1.0/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);
我正在 Java 中构建一个简单的 class,用于计算 Pi 的值,并在其旁边打印 Pi 的实际值。 该程序的输入是一串自然数(大于0),用于确定计算的精度。 这是我的代码:
public class Pi {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);
}
(*出于某种原因,文本中仅此处缺少右括号)
问题是变量 "myPi" 只在 for 循环的第一次迭代中改变。 例如,对于输入 4 (N=4),结果将是 4.0 而不是 3.1....
找不到这个问题的解决方案,谢谢!
(1/((i*2)+1))
上述表达式在除 i == 0
之外的所有情况下都被计算为 0
,因为它是一个整数除法并且期望值是一个分数,其计算结果为 0
您需要使用浮点运算才能获得浮点值。
(1.0/((i*2)+1)) <-- Note the 1.0 here
如果你想要一个双精度值作为一个操作的结果,至少一个操作数必须是双精度的。 试试这个
int N = Integer.parseInt(args[0]);
double myPi = 0;
for (int i=0 ; i<N ; i++) {
myPi += (Math.pow(-1,i))*(1.0/((i*2)+1));
}
myPi *= 4;
System.out.println(myPi + " " + Math.PI);