【问题标题】:Explain my output解释我的输出
【发布时间】:2017-12-20 09:34:36
【问题描述】:

我的输出应该是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();
}

【问题讨论】:

  • 你对i=i++ * j的理解正确吗?
  • 我认为您根本没有正确理解它。
  • 你有没有一步步调试和检查会发生什么?调试是找出这些问题的方法。
  • 你为什么会期待5 30?对我来说,很明显它是5 25i++ 的值是i值,而不是增量值。

标签: java c# operator-keyword


【解决方案1】:

第一次迭代:

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

第二次迭代:

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

注意后自增运算符返回变量的原始值(在它被递增之前)。

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

看到您的评论,您应该注意到表达式 i=i++ * j 的计算顺序如下:

  1. 评估i++,返回i的原始值(第一次迭代中的1)并将i递增到2

  2. 计算乘法 - 1 * 5,等于 5

  3. i(分配前的值为2)分配给5

【讨论】:

  • 好奇地想知道..在给出旧值进行计算后,i++ 会发生什么。
  • @sudha i++ 增加了i,但i=i++ * ji 分配了一个新值,这会覆盖增加的值。
  • 我认为在第一次迭代后 i 的值增加 1 意味着现在 i=6 的值(在第一次迭代完成后)。在第二次迭代值中,例如 i= 6 * 5
【解决方案2】:

第一次运行: 我 = 1 * 5 打印:5 i的值:5

第二次运行: 我 = 5 * 5 打印:25

【讨论】:

    【解决方案3】:

    操作: i = i++ * j - 由于分配回相同的变量,即忽略 i++ 后增量,即i.
    它实际上与i = i * j 相同

    所以,它给出了输出5, 25

    i = ++i * j 将输出10, 55

    【讨论】:

    • 在第一次迭代中 i= ++i + j 表示 i=2 * 5 : i=10 并在 i 中赋值现在 i 的值为 10 ,在第二次迭代中首先增加 i 的值并计算像 i= 11 * 5 :i=55 这样的表达式
    • 你的意思是说In first Iteration i= ++i * j 而不是In first Iteration i= ++i + j ? ...休息一下你所理解的一切:)
    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2021-07-06
    • 2023-03-18
    • 2012-05-19
    • 2014-02-17
    • 2011-05-03
    • 2012-02-17
    相关资源
    最近更新 更多