在while循环内更​​改变量

时间:2019-07-23 06:13:19

标签: java

我正在尝试制作一个使用以下算法来计算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。

3 个答案:

答案 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.0k--,或者是k++k-=k。我不确定。