前/后递增/递减和操作员订单混淆

时间:2014-04-30 17:33:06

标签: java operators

我正在进行一些练习,但我对此感到困惑:

public static int f (int x, int y) {
  int b=y--;
  while (b>0) {
    if (x%2!=0)  {
      --x;
      y=y-2; 
    }
    else { 
      x=x/2;
      b=b-x-1; 
    }
  }
  return x+y; 
} 

b=y--的目的是什么? 例如,x=5y=5 当我们第一次进入while循环(while (b>0))时,b = 4还是5?当我运行我的计算机中的代码b是5.并且返回是3.我真的不清楚。对不起,如果我的问题不清楚。

5 个答案:

答案 0 :(得分:5)

int b=y--;首先指定b=y然后递减 yy--)。

另请查看prefix/postfix unary increment operator

此示例(取自链接页面)演示了它:

class PrePostDemo {
    public static void main(String[] args){
        int i = 3;
        i++;
        // prints 4
        System.out.println(i);
        ++i;               
        // prints 5
        System.out.println(i);
        // prints 6
        System.out.println(++i);
        // prints 6
        System.out.println(i++);
        // prints 7
        System.out.println(i);
    }
}

答案 1 :(得分:3)

后递增/递减与预递增/递减之间的差异在evaluation of the expression

  

预增量和预减量运算符将其操作数递增(或递减)1,表达式的值是结果递增(或递减)的值。相反,后递增和后递减运算符将其操作数的值增加(或减少)1,但表达式的值是操作数在递增(或递减)操作之前的原始值。

换句话说:

int a = 5;
int b;
b = --a;    // the value of the expression --a is a-1. b is now 4, as is a.
b = a--;    // the value of the expression a-- is a. b is still 4, but a is 3.

请记住,程序必须评估表达式以执行所有内容。一切都是表达,即使只是随意提及一个变量。以下所有都是表达式:

  • a
  • a-1
  • --a && ++a
  • System.out.println(a)

当然,在表达式的评估中,operator precedence决定表达式的值,就像你在小学里学到的PEMDAS一样。一些运算符,如递增/递减,有副作用,这当然很有趣,也是创建函数式编程的原因之一。

答案 2 :(得分:1)

我相信b等于5进入循环因为

b=y--;

当" - "在变量后面,它在动作之后递减它。

答案 3 :(得分:1)

编码很差,因为它会让新程序员感到困惑。

该函数,假设它正在传递值,就像上面的例子中一样(而不是通过引用传递)获取y的副本,递减它,并将其分配给b。它不会改变调用时传递给函数的参数。

答案 4 :(得分:0)

帖子增量

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

<script>
    $(function () {
        $("#btnSubmit").click(function () {
            $.ajax({
                url: "Test/Index2",
                method: "Post",
                data: $("#mainform").serialize(),
                success: function () {
                    alert("sueess");
                },
                error: function (error) {
                    alert("error");
                }
            });
        });
    })
</script>
}

后减量

x++; 
x += 1; 

预增量:x--; x -=1;
预减:++x;

根据 Head First Java:

--x;x++ 的区别:

++x
int x = 0; int z = ++x; 
Produces: x is 1, x is 1