S'il s'agit d'un tableau unidimensionnel de type primitif ordinaire, vous pouvez le copier avec clone (). S'il s'agit d'un tableau de classes, vous pouvez faire une copie superficielle en clonant (). Ensuite, s'il s'agit d'un tableau bidimensionnel de type primitif ...
J'avais l'habitude de créer un autre tableau bidimensionnel et de copier les valeurs, mais quand j'ai vu la source de quelqu'un, j'ai pensé que je pouvais l'écrire en une seule ligne.
public static void main(String[] args) {
int[][] map = new int[3][3];
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
map[y][x] = x+y;
}
}
System.out.println("before");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
int[][] nmap = map.clone();
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
nmap[y][x] = 4-(x+y);
}
}
System.out.println("after");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
}
Quand tu cours
before
0 1 2
1 2 3
2 3 4
after
4 3 2
3 2 1
2 1 0
J'avais l'intention de faire clone () dans nmap, mais map a été réécrite.
Essayez de sortir la valeur de hachage de int [].
public static void main(String[] args) {
int[][] map = new int[3][3];
System.out.println("before");
for (int y=0; y<3; y++) {
System.out.println(map[y]);
}
int[][] nmap = map.clone();
System.out.println("after");
for (int y=0; y<3; y++) {
System.out.println(nmap[y]);
}
}
Quand tu cours
before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@15db9742
[I@6d06d69c
[I@7852e922
C'est le même. Si vous y réfléchissez bien, c'est naturel, mais comme int [] est un type de référence, c'est une copie superficielle.
Puis clone () int [].
public static void main(String[] args) {
int[][] map = new int[3][3];
System.out.println("before");
for (int y=0; y<3; y++) {
System.out.println(map[y]);
}
int[][] nmap = new int[3][];
for (int y=0; y<3; y++) {
nmap[y] = map[y].clone();
}
System.out.println("after");
for (int y=0; y<3; y++) {
System.out.println(nmap[y]);
}
}
Quand tu cours
before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@4e25154f
[I@70dea4e
[I@5c647e05
Cette fois c'est bon.
Essayez clone () avec int [].
public static void main(String[] args) {
int[][] map = new int[3][3];
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
map[y][x] = x+y;
}
}
System.out.println("before");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
int[][] nmap = new int[3][];
for (int y=0; y<3; y++) {
nmap[y] = map[y].clone();
}
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
nmap[y][x] = 4-(x+y);
}
}
System.out.println("after");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
}
Quand tu cours
before
0 1 2
1 2 3
2 3 4
after
0 1 2
1 2 3
2 3 4
nmap est une copie de map.
Les tableaux bidimensionnels ne peuvent pas être clonés () sur une seule ligne. Même si vous l'écrivez dans la source de quelqu'un, rien ne garantit qu'il est correct.
Recommended Posts