解释我的输出

时间:2017-12-20 09:34:36

标签: java c# operator-keyword

我的输出应为5 30,但输出为5 25我想知道为什么要提供5 25

public static void main(String[] args)
{
   int i = 1, j = 5;

   do
   {
       System.out.println( i = i++ * j);
   } 
   while (i <= 10);

   System.out.println();
}

3 个答案:

答案 0 :(得分:10)

第一次迭代:

i == 1 : i=i++ * j
            1  * 5 = 5

第二次迭代:

i == 5 : i=i++ * j
            5  * 5 = 25

请注意,post increment运算符返回变量的原始值(在它递增之前)。

我觉得很奇怪你在第一次迭代中期望正确的输出(5),但是在第二次迭代中没有遵循相同的逻辑来获得正确的输出(25)。

看到您的评论,您应该注意表达式i=i++ * j按以下顺序进行评估:

    评估
  1. i++,在第一次迭代中返回i1)的原始值,并将i递增到2。< / p>

  2. 评估乘法 - 1 * 5,等于5

  3. i(在作业之前的值为2)被指定为5

答案 1 :(得分:0)

首先运行:     i = 1 * 5 打印:5 i的值:5

第二轮:     i = 5 * 5 打印:25

答案 2 :(得分:0)

操作: i = i++ * j - 由于分配回同一个变量i,e,忽略i++后递增。 i
它实际上与i = i * j

相同

因此,它提供输出5, 25

同时,i = ++i * j会提供输出10, 55