class Test {
public static void main(String[] args) {
for (int i= 1; i < 2; i++) {
System.out.println(i);
System.out.println(++i);
int a = 1;
System.out.println(a++);
System.out.println(++a);
}
}
}
此处的输出为1,2和1,3。在我得到不同结果的两种情况下,我们都在进行后递增和前递增?
答案 0 :(得分:3)
因为帖子增量发生在迭代的结尾。
因此,下面的代码:
for (int i= 1; i < 2; i++) {
System.out.println(i);
System.out.println(++i);
将像这样工作:
int i = 1;
System.out.println(i); // i is still 1
System.out.println(++i); // pre increment making i to 2 and then print
i++;
if(i<2)
// iterate again
但是,在第二种情况下:
int a = 1;
System.out.println(a++); // post increment first print 1 and then change a to 2
System.out.println(++a); // pre increment a now changed to 3
答案 1 :(得分:1)
i++
循环定义中的i
仅在每次迭代结束时发生。在执行i++
之后,您再也不会打印i++
的值了,因为循环是在第一次迭代之后终止的。
顺便说一句,如果System.out.println(i);
在println
之前执行,您仍然会得到不同的输出(与最后两个2
语句相比)-3
,后跟 public static void showRouteOnMap(Context mContext, String lat, String lng) {
Uri gmmIntentUri = Uri.parse("google.navigation:q=" + lat + "," + lng);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
mContext.startActivity(mapIntent);
}
。
答案 2 :(得分:1)
general structure of a for loop(更准确地说是这种用于语句的基本类型)是:
for ([ForInit]; [Expression]; [ForUpdate]) Statement
等效的while循环为:
[ForInit];
while ([Expression]) {
Statement;
[ForUpdate];
}
换句话说,更新是在循环体之后执行的。
因此您的代码等效于:
// ForInit
int i = 1;
while (/* Expression */ i < 2) {
// Statement
System.out.println(i);
System.out.println(++i);
int a = 1;
System.out.println(a++);
System.out.println(++a);
// ForUpdate
i++;
}
希望这很容易看出为什么输出存在差异。
答案 3 :(得分:0)
在第一种情况下,不调用后递增。如果您了解for循环的工作原理,您将知道增量部分不会在第一次执行。初始化部分,这里int i = 1,并且条件检查-i <2被验证。仅在每次迭代之后才调用增量部分。
在第二种情况下,执行后递增操作,因此会产生值差。您应该更多地关注循环的基础。
答案 4 :(得分:0)
System.out.println(i);
我在这里没有增加。如果是这样,答案将是相同的:
#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map
在通过循环完成之前不做任何事情。