我在下面的代码中尝试了结果{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++;
}
答案 0 :(得分:1)
第一个元素的值更改为第二个元素的值,因为行arr[i++] = arr[i];
实际上是这样执行的:
arr[0] = arr[1]
这意味着数组的第一个值设置为数组的第二个值(记住数组的索引从0开始),在这种情况下为2。 ++
运算符仅在第一次使用它作为实际值后才递增计数器而不增加它。
第一个循环通过第一个while循环后,您的数组看起来像这样:[2,2,3]
i
为1
然后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}