Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在while循环中更改变量_Java - Fatal编程技术网

Java 在while循环中更改变量

Java 在while循环中更改变量,java,Java,我正在尝试制作一个程序,使用以下算法计算PI: PI = 4 x (1 - 1/3 + 1/5 - 1/7 + 1/9 ....) etc. 我不明白操作符的位置是如何影响变量的 在循环的第一次迭代中产生的结果是有意义的,但随后它似乎重置为初始值,并在第二次迭代中忽略赋值运算符。重复这个结果1,然后是结果2,然后是结果1,结果2,等等 我试着在《Java:如何编程(早期对象),第11版》这本书中查找,在第四章中,他们讨论了操作符,但我发现它们没有涵盖循环中的条件 double k = 1

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

我认为您将操作
-=
与操作
=-
混淆了

a-=b
执行
a-b
并将结果存储在
a

a=-b
执行
-b
(更改符号),然后将
-b
存储到
a

这就是
k=-k
所做的。取
k
的值,更改其符号并存储到
k
。这相当于在循环之前更改
k

的符号

k=1

  • 循环#1
    k=-(1.0)
    :现在
    k=-1.0
    ,它被带到下一个循环

  • 循环#2
    k=-1.0
    :现在
    k=1.0
    ,它被带到下一个循环

  • 循环#3
    k=-(1.0)
    :现在
    k=-1.0
    ,它被带到下一个循环

  • 等等

k
正在改变每个循环,就像
j
不是
3.0
每个循环一样


您所说的递增和递减符号可能是
k--
k++
,或者可能是
k-=k
k+=k
。我不确定。

如果
k==-1.0
而您正在对其执行
-k
,会发生什么?或者更准确地说,什么是
-(-1.0)
?不是在每次迭代中减去一个分数,而是在每一秒中减去一个分数。在每次迭代中设置
k=-k
只是切换符号。啊,太好了。谢谢你。我有一种感觉,当两个“-”符号在一起时,它等于一个正数。我只是脑子里有点糊涂。但你解释得很好。谢谢。非常感谢,我感谢你花时间帮助我。非常感谢,我感谢你花时间帮助我