为什么i ++首先发生?

时间:2015-08-22 13:47:32

标签: java

我在下面的代码中尝试了结果{2,3,3}。我无法解释为什么第一个元素的价值被改变了。我认为这是混叠效应,但很困惑。

int[] arr = new int[] { 1, 2, 3 };
int i = 0;
while (i < arr.length - 1) {
    arr[i++] = arr[i];
}
i = 0;
while (i < arr.length) {
    System.out.println(arr[i]);
    i++;
}

2 个答案:

答案 0 :(得分:1)

第一个元素的值更改为第二个元素的值,因为行arr[i++] = arr[i];实际上是这样执行的:

arr[0] = arr[1]

这意味着数组的第一个值设置为数组的第二个值(记住数组的索引从0开始),在这种情况下为2。 ++运算符仅在第一次使用它作为实际值后才递增计数器而不增加它。

第一个循环通过第一个while循环后,您的数组看起来像这样:[2,2,3] i1然后arr[1] = arr[2]正在执行,它将数组更改为: [2,3,3] i 2 if(isset($_POST['data'])){ //$action_name = $_POST['action_name']; $data = json_decode(json_decode($_POST['data'])); $data0 = echo $data[0]; $data1 = echo $data[1]; $data2 = echo $data[2]; $query = mysql_query("INSERT INTO Expenses (accountid, category, date, amount, repeated) VALUES ('$accountid', '$data0', '$data1', '$data2', '0')"); //$query = mysql_query("INSERT INTO Expenses (accountid, category, date, amount, repeated) VALUES ('$accountid', 'test1', 'test1', 'test1', '0')");} 这是最终结果。

答案 1 :(得分:0)

如果我们单步执行第一个循环(arr.length = 3)

first: i < 3 - 1 : 0 < 2 => true
arr[0] (increments i, i is now 1) = arr[1] =>  arr[0] = 2;
arr is now {2, 2, 3}

second time in loop: i < 3 - 1 : 1 <  2 => true
arr[1] (increments i, i is now 2) = arr[2] => arr[1] = 3
arr is now {2, 3, 3}

third loop check: i < 3 - 1 : 2 < 2: false; exit while loop;

Print out array: {2, 3, 3}