PolygeneLubriotes的回复包含了值得注意的要点。如果将i++更改为++i,则增加赋值顺序将更改,并且很容易出错。
$ javac ThirdDArray.java
$ java ThirdDArray
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at ThirdDArray.main(ThirdDArray.java:17)
$ cat ThirdDArray.java
import java.util.*;
import java.io.*;
public class ThirdDArray {
public static void main(String[] args) {
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
//THIS IS THE TRICK POINT!
// ++i means "first increase then assignment"
// i++ means "first assignment then increase"
arr1d[++i] = arr2d[r][c];
}
}
// ERROR ONLY DUE TO THE ASSIGNMENT-INCREASE order!
System.out.println(Arrays.toString(arr1d));
// started from 1 so go out of the allocated size
}
}