[英]Variable changing within a while loop
我正在嘗試制作一個使用以下算法來計算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。
您可以在循環外初始化k
,因此只能發生一次。 初始值為1
。
在每次迭代期間,您求k
:
k=-k;
1
取為-1
。 -1
被取反為1
。 1
取為-1
。 據我所知,如果左運算符為“ =”,而右運算符為遞增或遞減符號,則結果應始終為變量k始終為-k。
我認為您將操作-=
與操作=-
混淆了
ab
a -= b
執行ab
並將結果存儲在a
a = -b
執行-b
(更改符號),然后將-b
存儲到a
那就是k = -k
作用。 取k
的值,更改其符號並將其存儲為k
。 這相當於說改變k
的符號。
循環前
k = 1
循環#1 k = -(1.0)
:現在k = -1.0
,它將-1.0
傳遞到下一個循環。
循環#2 k = -(-1.0)
:現在k = 1.0
,將1.0
傳遞到下一個循環。
循環#3 k = -(1.0)
:現在k = -1.0
,它將-1.0
傳遞到下一個循環。
等等
k
在改變每個循環,就像j
在每個循環中不是3.0
一樣。
您正在討論的增量和減量符號可能是k--
和k++
,或者可能是k-=k
和k+=k
。 我不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.