[JAVA] Ich steckte in einem Klon eines zweidimensionalen Arrays fest

Wenn es sich um ein eindimensionales Array vom gewöhnlichen primitiven Typ handelt, können Sie es mit clone () kopieren. Wenn es sich um ein Array von Klassen handelt, können Sie durch Klonen () eine flache Kopie erstellen. Wenn es sich dann um ein zweidimensionales Array vom primitiven Typ handelt ...

clone () vom zweidimensionalen Array vom Typ int

Früher habe ich ein anderes zweidimensionales Array erstellt und die Werte kopiert, aber als ich die Quelle von jemandem sah, dachte ich, ich könnte sie in eine Zeile schreiben.

	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("");
		}
	}

Wenn du rennst

before
0 1 2 
1 2 3 
2 3 4 
after
4 3 2 
3 2 1 
2 1 0 

Ich wollte clone () in nmap erstellen, aber map wurde neu geschrieben.

Hash-Wert des Arrays

Versuchen Sie, den Hashwert von int [] auszugeben.

	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]);
		}
	}

Wenn ausgeführt,

before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@15db9742
[I@6d06d69c
[I@7852e922

Es ist das gleiche. Wenn Sie sorgfältig darüber nachdenken, ist es natürlich, aber da int [] ein Referenztyp ist, handelt es sich um eine flache Kopie.

Loop and Clone () eines eindimensionalen Arrays

Dann klone () 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]);
		}
	}

Wenn ausgeführt,

before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@4e25154f
[I@70dea4e
[I@5c647e05

Diesmal ist es gut.

Versuchen Sie, die erste Quelle als eindimensionales Array zu klonen ()

Versuchen Sie clone () mit 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("");
		}
	}

Wenn ausgeführt,

before
0 1 2 
1 2 3 
2 3 4 
after
0 1 2 
1 2 3 
2 3 4 

nmap ist eine Kopie der Karte.

Zusammenfassung

Zweidimensionale Arrays können nicht in einer Zeile geklont () werden. Selbst wenn Sie es in die Quelle einer anderen Person schreiben, gibt es keine Garantie dafür, dass es korrekt ist.

Recommended Posts

Ich steckte in einem Klon eines zweidimensionalen Arrays fest
Ich blieb in File stecken
[JAVA] Projekt Euler, ich steckte im achten Quartal fest
Wo ich im heutigen "Rails Tutorial" (2020/10/08) stecken geblieben bin
Von enum vor dem Schmied festgefahren
Wo ich im heutigen "Rails Tutorial" (2020/10/05) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/06) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/04) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/07) stecken geblieben bin
Ich habe ein Symbol, das in Android Studio nicht aufgelöst werden kann
[Ruby] Extrahieren eines zweidimensionalen Arrays
Multiplikation innerhalb eines Ruby-Arrays
Ich war verwirrt, weil es eine Aufteilung im Array gab
Ich habe einen RESAS-API-Client in Java erstellt
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
[Persönliches Memo] Rückblick auf das, was ich in Docker feststeckte ... einschließlich Linux-Kenntnisse
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
Ich habe ein PDF mit Java erstellt.
Verwandeln Sie ein Array von Strings in eine Liste von Ganzzahlen in Java
Bleiben Sie in einem Java Primer stecken
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Erhöhen Sie dynamisch die Anzahl der Elemente in einem zweidimensionalen Java-Array (mehrdimensionales Array).
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Ich habe die Verwendung der Schlangenhülle für den Variablennamen in Spring Boot nicht mehr verstanden
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Extrahieren Sie Elemente eines Arrays / Extrakts in umgekehrter Reihenfolge - Java
Ich habe ein Kalenderproblem mit Ruby versucht
Bei der Suche nach mehreren in einem Java-Array
Ich war süchtig nach Spring's @Transactional
Ich habe versucht, eine Formel in Javadoc einzubetten
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
12 von Array
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich habe ein Beispiel erstellt, wie ein Delegat in Swift UI 2.0 mit MapKit geschrieben wird
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
Messen Sie die Größe eines Ordners mit Java
Ich blieb beim Versuch von Volleys Synchronisationsprozess (Java) hängen.
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich habe ein Programm zur Beurteilung von Primzahlen in Java geschrieben
Ich habe ein Janken-Spiel in Java (CLI) gemacht.
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe eine Ruby-Erweiterungsbibliothek in C erstellt
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Ich habe ein Primfaktorisierungsprogramm in Java geschrieben
RSpec-Sammlung, die ich häufig verwendet habe
Zusammenfassung dessen, was ich in Spring Batch gelernt habe
So ermitteln Sie den Gesamtwert, den Durchschnittswert usw. eines zweidimensionalen Arrays (mehrdimensionales Array) -java
Ich hasse diese Art von Code! Eine Sammlung von Anti-Mustern, die tatsächlich auf dem Feld zu sehen sind
Eine Geschichte über einen Fehler während der Migration in Docker PHP Laravel
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen