我正在尝试制作一个使用以下算法来计算PI的程序:
PI = 4 x (1 - 1/3 + 1/5 - 1/7 + 1/9 ....) etc.
我不明白运算符的位置如何影响变量。
在循环的第一次迭代中产生的结果是有意义的,但是随后似乎重置为初始化值,并且第二次忽略了赋值运算符。重复此结果1,然后是结果2,然后是结果1,结果2,依此类推...
我尝试在名为“ Java:如何编程(早期对象),第11版”的书中进行研究,在第四章中,他们讨论了运算符,但我发现它们没有涵盖循环中的条件。
double k = 1.0, j = 1.0;
double sum = 0, PI = 0;
while((Math.abs(PI-Math.PI)>0.000001)){
sum += k/j;
j = j + 2;
k=-k;
PI = 4 * sum;
System.out.println(k);
}
我将while循环的条件更改为运行4次并打印k。我希望变量“ k”的第一次打印为-1.0。是,但是k的第二次打印(while循环的第二次循环)为1.0。第三个是-1.0,然后第四个是1.0,依此类推...
我不明白为什么在所有迭代中它都不是-1.0,因为据我所知,对于Java赋值运算符,如果左运算符为'=',而右运算符为递增或递减符号,那么结果应该总是变量k总是= -k。
答案 0 :(得分:0)
您可以在循环外初始化k
,因此只能发生一次。初始值为1
。
在每次迭代期间,您都将k
取反:
k=-k;
1
被取反为-1
。=1
被取反为1
。1
被取反为-1
。答案 1 :(得分:0)
据我所知,如果左运算符为'=',而右运算符为递增或递减符号,则结果应始终为变量k始终为-k。
我认为您正在将操作-=
与操作=-
混淆
a -= b
执行a-b并将结果存储在a
a = -b
执行-b(更改符号),然后将-b存储到a
k = -k
就是这样做的。取k的值,更改其符号并将其存储为k。这相当于说改变k的符号。
答案 2 :(得分:0)
循环前
steps:
- task: MicroFocus1.alm-octane-integration.octane-start-task.octane-start-task@1
displayName: 'ALM Octane Pipeline Start'
inputs:
OctaneService: Octane
循环#1 k = 1
:所以现在k = -(1.0)
,它被k = -1.0
传递到下一个循环。
第2个循环-1.0
:所以现在k = -(-1.0)
,它已将k = 1.0
传递到下一个循环。
循环#3 1.0
:所以现在k = -(1.0)
,它被k = -1.0
传递到下一个循环。
以此类推
-1.0
改变着每个循环,就像k
并非j
改变着每个循环一样。
您正在谈论的递增和递减符号可能是3.0
和k--
,或者是k++
和k-=k
。我不确定。