我正在进行一些练习,但我对此感到困惑:
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=5
和y=5
当我们第一次进入while循环(while (b>0)
)时,b
= 4还是5?当我运行我的计算机中的代码b
是5.并且返回是3.我真的不清楚。对不起,如果我的问题不清楚。
答案 0 :(得分:5)
int b=y--;
首先指定b=y
然后递减 y
(y--
)。
另请查看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