OOP Übergeben von Arrays per Konstruktor

V

Vampy

Gast
Hallo,

ich versuche eine Matrix per Konstruktor an die Klasse zu übergeben. (Hoffe, ich habe mich korrekt ausgedrückt.)

Zu meinen Problemen:

Geht das, was ich gemacht habe? Ist das 'logisch'?
Wenn ja, wie kann ich es machen?
Ist der Konstruktor sinnvoll? Wenn ja, was genau sollte darein?

Im Moment habe ich als Ausgabe die Referenzen des Arrays als Matrix! :/

[JAVA=42] public class testdriver {

public static void main(String[] args) {

int[][] test = new int[][] {

{ 4, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 5, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },

};

Solve sudoku = new Solve(test);

sudoku.print();
}

}
[/code]


Hier die Klasse dazu:

[JAVA=42]public class Solve {

private static int[][] sudoku;

public Solve(int[][] matrix) {

sudoku = matrix.clone();

}

public void print() {
print(sudoku);
}

public static void print(int[][] matrix) {

for (int zeile = 0; zeile < matrix.length; zeile++) {
for (int spalte = 0; spalte < matrix[zeile].length; spalte++) {

System.out.print(matrix[spalte] + " ");

}
System.out.println();
}

}
}[/code]


Sieht noch sehr anfänglich aus, ich will einfach erstmal hinkriegen, dass ich die AnfangsMatrix übergebe und damit arbeiten kann.
 

XHelp

Top Contributor
Ich verstehe nicht so ganz die Frage. Es ist natürlich legitim Werte, ohne die eine Instanz keinen Sinn macht, im Konstruktor zu übergeben.
Zu der Clone-Methode: das wird nicht reichen, da es ein 2D Array ist. Es sollte eher (ungetestet) sowas wie:
Java:
sudoku = new int[matrix.length][];
for (int i=0;i<sudoku.length;i++) {
  sudoku[i] = matrix[i].clone();
}
sein. Oder statt dem innerem
Code:
clone
System.arraycopy benutzen
 
Zuletzt bearbeitet:
V

Vampy

Gast
Erstmal vielen Dank für deine Antwort.

Zu meiner Frage:

Ich habe im Testdriver die gegebene Matrix, die möchte ich per Konstruktor an die Klasse übergeben und dann damit arbeiten. Ist sowas sinnvoll? Wenn nein, wie könnte es anders gehen?
 

pro2

Bekanntes Mitglied
Kann man so machen, aber ich frage mich, warum alles static ist?^^ Wenn du das static willst, dann kannst du dir auch direkt eine Methode zum Ausgeben eines Arrays schreiben und die dann static machen. Dann brauchst du nicht extra ein Objekt anlegen!
 
V

Vampy

Gast
Hm - ist doch nur die 'Print-Methode' static, die wird dann an durch die 'Nicht-static-Methode' print aufgerufen.

Ist es sinnvoller ohne Objekte zu arbeiten? Ich glaube nicht, oder täusch ich mich? :/
 

pro2

Bekanntes Mitglied
Java:
class Hilfsmittel{
    public static void printArray(int[][] array){
        //mach was
    }
}

Und in der anderen Klasse dann einfach:
Java:
Hilfsmittel.printArray(test);
 
V

Vampy

Gast
Hm, das funktioniert immernoch nicht so richtig.

Ich steh total auf dem Schlauch, um mal ehrlich zu sein.


Nochmal zur Verständnis:


Objekt erstellen, Matrix per Konstruktor an die Klasse übergeben, Matrix per 'Print-Methode' ausgeben und die Methode in der TestdriverKlasse aufrufen.

Problem:

Es werden nur die Adressen z.B. [I@71e2b67c sowas ausgegben (Das als Matrix!) :/
 

TiJay

Mitglied
Hallo,

Du schreibst:

Java:
public static void print(int[][] matrix) {
 
        for (int zeile = 0; zeile < matrix.length; zeile++) {
            for (int spalte = 0; spalte < matrix[zeile].length; spalte++) {
                
                System.out.print(matrix[spalte] + " ");
                
            }
            System.out.println();
        }
 
    }

Logisch, dass es nicht klappt, denn mit
Java:
System.out.print(matrix[spalte] + " ");
gibst du ja ein Array aus und nicht das Element selbst.

Es müsste vielmehr heißen
Java:
System.out.print(matrix[zeile][spalte] + " ");
oder nicht?

Diese komischen Zeichen erhältst du, weil die Klasse Array (jedes Array, auch ein int-Array erbt von Array) die Object.toString()-Methode nicht überschreibt und beim Ausgeben eines Arrays immer der Wert ausgegeben wird, den die toString()-Methode zurückgibt.

Gruß,
Timo
 
V

Vampy

Gast
Oh mein Gott!! Ich hab zwar nicht viel Ahnung von Java (Glaub ich), aber auf sowas hätte ich selber kommen müssen. Man wird halt immer blinder, wenn man einfach drauf los programmiert und dann denkt, die 'einfachen' Sachen sind richtig.

Vielen, vielen Dank!!


PS: Wie close ich das hier?
 
V

Vampy

Gast
Kann den Button nicht anklicken, trotzdem hab ich eine weitere Frage bezüglich OOP!

Ist es sinnvoll, was ich da geschrieben habe?


Java:
Solve sudoku = new Solve(test);

		sudoku.print(test);


Wenn ich jetzt die Matrix verändern würde, würde sich die anfängliche Matrix ändern? (So sollte es gedacht sein!)

Weil beim 'print' übergebe ich ja die anfängliche Matrix...
 

TiJay

Mitglied
Naja, so ist die erste Zeile quasi überflüssig.

Versuchs mal so:
Java:
Solve.print(test);
oder so:
Java:
Solve sudoku = new Solve(test);
sudoku.print();

Bei deiner Variante legst du ja zuerst ein neues Objekt an, was später aber gar nicht mehr verwendet wird. Du brauchst aber auch keine Instanz, um print(test) aufzurufen, weil das eine static-Methode ist und auch mit dem Klassennamen davor funktioniert.

Bei deiner Variante und bei meiner ersten Variante kannst du die Matrix ändern und sie wird verändert ausgegeben.

Bei der zweiten Variante kannst du die Matrix von außerhalb nicht mehr ändern, das müsste dann in der Klasse Solve geschehen.

Gruß,
Timo
 
V

Vampy

Gast
Bei der zweiten Variante meckert er, weil nichts übergeben wird. Wenn ich 'test' übergebe, passt alles.

Die Methode 'print' ist nicht auf static gesetzt.

Ich will die Matrix auch NUR in der Klasse Solve ändern, sonst nichts. :)
 
V

Vampy

Gast
Sorry, aber kannst du mir den zweiten Teil nochmal genauer erklären? Was genau meinst du damit?

Ich glaub ich sollte mir OOP nochmal genauer angucken. Besonders die Begrifflichkeiten und wie sie zusammenhängen. :/
 

xehpuk

Top Contributor
Pro Solve-Instanz hat man ein Sudoku-Array. Dieses ist also immer an eine Instanz gebunden, also ist es deren Aufgabe, dieses auszugeben. Deswegen braucht man hier kein
Code:
static
.
Möchte man eine individuelle textuelle Repräsentation haben, so überschreibt man normalerweise die
Code:
toString()
, die jede Klasse von
Code:
Object
erbt.

Letztendlich könnte deine Klasse (fürs Erste) so aussehen:
Java:
import java.util.Arrays;

public class Solve {
	private final int[][] sudoku;
	
	public Solve(final int[][] matrix) {
		final int length = matrix.length;
		sudoku = new int[length][];
		for (int i = 0; i < length; i++) {
			sudoku[i] = matrix[i].clone();
		}
	}
	
	@Override
	public String toString() {
		final StringBuilder sb = new StringBuilder();
		final int length = sudoku.length;
		if (length != 0) {
			sb.append(Arrays.toString(sudoku[0]));
			for (int i = 1; i < length; i++) {
				sb.append('\n');
				sb.append(Arrays.toString(sudoku[i]));
			}
		}
		return sb.toString();
	}
	
	public void print() {
		System.out.println(this); // in dieser Methode wird this.toString() aufgerufen
		// System.out.println(this.toString()) geht auch alternativ
	}
	
	public static void main(final String[] args) {
		final int[][] test = new int[][] {
			{ 4, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 5, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
			{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 1, 0, 0, 0, 0 }, 
			{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
		};
		final Solve solve = new Solve(test);
		solve.print();
	}
}
 
V

Vampy

Gast
Hat sich erledigt, ich werde es ohne Objekte machen. Sonst ist mir das zu anstrengend. Bis jetzt funktioniert es wunderbar. :p

Vielen Dank für alle Antworten.

Kann man das hier löschen/closen? Ich kann's nicht als erledigt markieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Arrays Übergeben Java Basics - Anfänger-Themen 7
J Übergeben einer Objektreferenz Java Basics - Anfänger-Themen 6
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
R Problem bei Übergeben eines Objekts Java Basics - Anfänger-Themen 1
A Variablen Übergeben des Inhalts einer Variable in einen String Java Basics - Anfänger-Themen 17
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
M Fehler beim Übergeben von Daten an JTable Java Basics - Anfänger-Themen 14
C Übergeben von Variablen von einem Objekt zum nächsten Java Basics - Anfänger-Themen 5
D Hilfe beim Übergeben vom JTextfield Java Basics - Anfänger-Themen 2
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
M Übergeben einer Variable an actionPerformed(ActionEvent e)? Java Basics - Anfänger-Themen 5
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
H Arrays befüllen Java Basics - Anfänger-Themen 43
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
D Arrays Java Basics - Anfänger-Themen 9
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
N Arrays Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
A Arrays aufsummieren Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
S Arrays aneinanderketten Java Basics - Anfänger-Themen 20
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
D Verschlüsslungsaufgabe / Arrays Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
J Methoden Mehrdimensionale Arrays übereinander legen Java Basics - Anfänger-Themen 5
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Zeppi Arrays[i] Java Basics - Anfänger-Themen 7
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
K Sudoku mit 2D Arrays Java Basics - Anfänger-Themen 19
T Vertikales Histogramm mit Arrays Java Basics - Anfänger-Themen 3
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
mihe7 Von Datentypen und (mehrdimensionalen) Arrays Java Basics - Anfänger-Themen 4
A Teilen eines Arrays Java Basics - Anfänger-Themen 5
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
1 Arrays Java Basics - Anfänger-Themen 7
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
Z Erste Schritte Indexe innerhalb eines Arrays zusammensählen Java Basics - Anfänger-Themen 14
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
A Freie Stelle eines Arrays Java Basics - Anfänger-Themen 17
H Ein gegebenes Int Array zu Zwei Arrays zurück geben Java Basics - Anfänger-Themen 6
J 2D Arrays summieren Java Basics - Anfänger-Themen 21
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
A Java.util.Arrays Java Basics - Anfänger-Themen 15
T Methodenverknüpfung mit Arrays Java Basics - Anfänger-Themen 4
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben