Matrix Elemente vergleichen

Mika34

Bekanntes Mitglied
Hallo Freunde der Sonne,

Ich melde mich mal wieder mit einem grundlegenden Problem im Allgemeinen, welches in meinem Java Buch für Anfänger nicht ausreichend thematisiert wird.
Sagen wir ich habe ein zwei dimensionales Array, welches eine 6x6 Matrix darstellt. Nun möchte ich in diesem 6x6 Array in jeder Spalte bzw. Zeile jeweils 4 Elemente der Matrix vergleichen. Um die Diagonalelemente zu vergleichen, habe ich mittlerweile verstanden, jedoch fehlt mir momentan noch das Verständnis wie man darauf kommt die Zeilen bzw. Spalten auszuegeben.

Es geht hier nur um die Herangehensweise, wie man hoffentlich meinen Beispiel der Prüfung der Diagonalelemente entnehmen kann. :)

Über jede Hilfe wäre ich dankbar :))

Java:
for(int i = 0; i < array.length - 2; i++){
    for(int j = 0; j < array.length - 2; j++)
        if((array[i][j].equals("2")) && (array[i+1][j+1].equals("55")) &&
           (array[i+2][j+2].equals("4444")) && (array[i+3][j+3].equals("2"))){
            System.out.println("Hi");
        }
    }
}
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Es ist noch unverständlich, was Du machen möchtest... Die Form der Matrix ausgeben, also zum Beispiel 6x6 oder 6x5?

Nun möchte ich in diesem 6x6 Array in jeder Spalte bzw. Zeile jeweils 4 Elemente der Matrix vergleichen. Um die Diagonalelemente zu vergleichen, habe ich mittlerweile verstanden, jedoch fehlt mir momentan noch das Verständnis wie man darauf kommt die Zeilen bzw. Spalten auszuegeben.
Es gibt doch immer nur eine Hauptdiagonale - oder?
 
X

Xyz1

Gast
Habe mal damit angefangen - aber gerade selber Probleme die Hauptdiagonale zu berechnen:
Java:
class Matrix {
	String[][] m = null;

	Matrix(String[][] p_m) {
		m = p_m;
	}

	int getRows() {
		return m.length;
	}

	int getCols() {
		return m[0].length;
	}

	List<Integer> getForm() {
		return List.of(getRows(), getCols());
	}

	List<String> getDiag(int i) {
		ArrayList<String> l = new ArrayList<String>();
		int x = getRows() - 1 - i / 2;
		int y = (i + 1) / 2;
		for (; x >= 0 && y >= 0; x--, y--) {
			l.add(m[x][y]);
		}
		Collections.reverse(l);
		return l;
	}

	List<List<String>> getAllDiags() {
		ArrayList<List<String>> l = new ArrayList<List<String>>();
		for (int i = 0; i < getCols() * 2 - 1; i++) {
			l.add(getDiag(i));
		}
		return l;
	}

	void printInfo() {
		System.out.println("Form " + getForm());
		System.out.println("Diags");
		for (List<String> l : getAllDiags()) {
			System.out.println(l);
		}
	}
}

Java:
	public static void main(String[] args) throws IOException {
		new Matrix(new String[][] {{ "1", "2", "3" }, { "4", "5", "6" }, { "7", "8", "9" }}).printInfo();
	}

Code:
Form [3, 3]
Diags
[7]
[4, 8]
[1, 5]
[2, 6]
[3]

Die Ausgabe müsste eigentlich sein
Code:
Form [3, 3]
Diags
[7]
[4, 8]
[1, 5 , 9]
[2, 6]
[3]

Sieht jemand den Fehler?
 

Mika34

Bekanntes Mitglied
Nein, ich habe beispielsweise 4 Werte, welcher in meiner 6x6 Matrix vorkommen können. Nun möchte ich prüfen, ob diese 4 Elemente diagonal vorkommen sprich beispielsweise bei (2,0),(3,1),(4,2),(5,3) oder auf anderen Diagonale, welche sich durch die 4 Elemente ergeben
 

Mika34

Bekanntes Mitglied
Damit fahre ich komplett gegen die Wand, deswegen habe ich euch gefragt, ob einer von euch schon einmal so etwas implementiert hat.
 

httpdigest

Top Contributor
Deine aktuelle Lösung aus deinem ersten Post ist doch schon gar nicht schlecht. Du prüfst da alle möglichen Diagonalen in die positive x und y Richtung. Jetzt fehlen doch nur noch die drei anderen Richtungen.
 

httpdigest

Top Contributor
Ich empfehle dir, dir wirklich mal selber Gedanken zu machen. Zum Beispiel könntest du, statt alle vier Diagonalen manuell/per Hand abzuprüfen, auch eine Schleife der Länge 4 nehmen und einen berechneten Faktor für die Laufrichtung und für den Offset der Indizes verwenden, so dass du mit einer Methode alle der vier möglichen Diagonalen prüfen kannst.
Das könnte z.B. so aussehen (ich hab's mal gebaut und extra etwas obfuscated, damit du dir mal selber Gedanken machst):
Java:
public class DiagonaleInMatrixFinden {
  public static <T> boolean containsDiagonale(T[][] arr, T[] diag) {
    for (int y = 0; y <= arr.length - diag.length; y++)
      for (int x = 0; x <= arr[y].length - diag.length; x++)
        for (int d = 0; d < 4; d++)
          if (checkDiagonale(arr, diag, y, x, d))
            return true;
    return false;
  }
  private static <T> boolean checkDiagonale(T[][] arr, T[] diag, int y, int x, int d) {
    int ox = d >>> 1, oy = d & 1, sx = 1 - (ox << 1), sy = 1 - (oy << 1);
    for (int i = 0; i < diag.length; i++)
      if (!arr[(y + i) * sy + (arr.length - 1)    * oy]
              [(x + i) * sx + (arr[y].length - 1) * ox].equals(diag[i]))
        return false;
    return true;
  }
  public static void main(String[] args) {
    Integer[][] arr = {
      { 0,  1,  2,  3,  4,  5},
      { 6,  7,  8,  9, 10, 11},
      {12, 13, 14, 15, 16, 17},
      {18, 19, 20, 21, 22, 23},
      {24, 25, 26, 27, 28, 29},
      {30, 31, 32, 33, 34, 35}
    };
    Integer[] diag = {33, 26, 19, 12};
    System.out.println(containsDiagonale(arr, diag));
  }
}
 

Mika34

Bekanntes Mitglied
Hi httpdigest,
Ich habe mir deine Lösung noch einmal angeschaut, jedoch werde ich einfach nicht schlauer davon. Auch verstehe ich deinen Bezug zum Codeschnipsel von mir nicht, kannst du mich etwas aufklären bzw. mir den Rohbau davon erklären
 

httpdigest

Top Contributor
Mein Code ist einfach eine Lösung für dein Problem, bzw. meiner Interpretation deines Problems, weil du hierfür noch keine exakte/formale Beschreibung gegeben hast. Der Code sucht an allen möglichen Positionen der Matrix entlang der vier möglichen Diagonalen (zwei Diagonalen vorwärts und dieselben Diagonalen rückwärts) das Muster, gegeben durch den Vektor aus 4 Elementen. Wobei der Code so generisch ist, dass er mit Vektoren und Matrizen beliebiger Größe funktioniert.
Die Schleifen über `y` und über `x` sind einfach für alle gültigen Positionen in der Matrix, an der eine der vier möglichen Diagonalen starten kann (wobei für die Diagnalen, die "rückwärts" in einer der beiden Dimensionen laufen, ein entsprechender Offset in der Methode `checkDiagnoale` ermittelt wird, um "von hinten" in der Matrix zu beginnen).
Die Schleife über `d` (0..3) identifiziert jeweils eine der vier Diagonalen.
Die Methode `checkDiagonale` prüft, ob an der Stelle `(y, x)` in der Matrix und der Diagonalen `d` ein Match gefunden wird.
 

Mika34

Bekanntes Mitglied
Vielen Dank für die Aufklärung, weil ich war mir nicht sicher, ob ich deinen Code nur falsch verstehe oder der Fallgar nicht aufgegriffen wurde, falls es sich um eine Diagonale handelt, welche sich abseits der Hauptdiagonalen befindet. Da dies auch der Fall ist, versuche ich es mal mit meinem neugewonnen Wissen dies umzusetzen :). Aber nochmals vielen Dank
 

Mika34

Bekanntes Mitglied
Mein Code ist einfach eine Lösung für dein Problem, bzw. meiner Interpretation deines Problems, weil du hierfür noch keine exakte/formale Beschreibung gegeben hast. Der Code sucht an allen möglichen Positionen der Matrix entlang der vier möglichen Diagonalen (zwei Diagonalen vorwärts und dieselben Diagonalen rückwärts) das Muster, gegeben durch den Vektor aus 4 Elementen. Wobei der Code so generisch ist, dass er mit Vektoren und Matrizen beliebiger Größe funktioniert.
Die Schleifen über `y` und über `x` sind einfach für alle gültigen Positionen in der Matrix, an der eine der vier möglichen Diagonalen starten kann (wobei für die Diagnalen, die "rückwärts" in einer der beiden Dimensionen laufen, ein entsprechender Offset in der Methode `checkDiagnoale` ermittelt wird, um "von hinten" in der Matrix zu beginnen).
Die Schleife über `d` (0..3) identifiziert jeweils eine der vier Diagonalen.
Die Methode `checkDiagonale` prüft, ob an der Stelle `(y, x)` in der Matrix und der Diagonalen `d` ein Match gefunden wird.
Habs mittlerweile verstanden! :)). Ohje, du kannst dir nicht vorstellen, was für ein Gefühl es ist! :)
Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
I matrix aufgabe Java Basics - Anfänger-Themen 22
L Zweidimensionaler Array; n x m - Matrix überprüfuen Java Basics - Anfänger-Themen 35
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
M Matrix Java Basics - Anfänger-Themen 3
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
B Dünn besetzte Matrix Java Basics - Anfänger-Themen 7
Al3xand3r01 Matrix, Nachbarelemente Java Basics - Anfänger-Themen 16
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Dreiecks-Matrix mit Array Java Basics - Anfänger-Themen 3
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
B Diskrete Faltung (Matrix) Randfälle Java Basics - Anfänger-Themen 8
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
O Matrix, Vektor Java Basics - Anfänger-Themen 9
H 2D Array, Symmetrische Matrix Java Basics - Anfänger-Themen 12
S Matrix spaltenweise befüllen Java Basics - Anfänger-Themen 1
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
S Methoden Transponierte Matrix Java Basics - Anfänger-Themen 3
N Vererbung Submatrix mit Verweis auf Matrix erstellen Java Basics - Anfänger-Themen 9
J Matrix erstellen Java Java Basics - Anfänger-Themen 7
B Transponiertes Matrix Java Basics - Anfänger-Themen 12
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
C Matrix transponieren - Hilfe Java Basics - Anfänger-Themen 1
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
L Matrix(Array) minimieren... Java Basics - Anfänger-Themen 9
E Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 7
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
O Matrix Multiplizieren Java Basics - Anfänger-Themen 4
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
V Matrix Transponieren Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
W Zweidimensionale Arrays als Matrix ausgeben Java Basics - Anfänger-Themen 8
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
O Matrix ordnen Java Basics - Anfänger-Themen 4
M Symmetrische Matrix Java Basics - Anfänger-Themen 2
W Methoden Rang von einer Matrix mit Gauss Java Basics - Anfänger-Themen 0
U Matrix Subtrahieren Java Basics - Anfänger-Themen 12
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
I Matrix überprüfen Java Basics - Anfänger-Themen 8
Z Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 13
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
N Matrix/Vektoren Java Basics - Anfänger-Themen 3
N Matrix Java Basics - Anfänger-Themen 14
T Methode, die eine 2 dimensionale Matrix kopiert. Java Basics - Anfänger-Themen 16
J Matrix Java Java Basics - Anfänger-Themen 3
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
A N*N Matrix Determinante berechnen Java Basics - Anfänger-Themen 47
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
O Java Matrix mal Matrix über while Schleife... Java Basics - Anfänger-Themen 10
O Transponieren einer Matrix per While-Schleife Java Basics - Anfänger-Themen 3
M Matrix - Probelm Java Basics - Anfänger-Themen 7
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
J Java Matrix befüllen Java Basics - Anfänger-Themen 5
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
F Matrix Java Basics - Anfänger-Themen 11
E Array als Matrix Java Basics - Anfänger-Themen 21
G OOP Parameter Matrix Java Basics - Anfänger-Themen 2
N Matrix Klasse Java Basics - Anfänger-Themen 4
B Maske an eine Matrix anpassen Java Basics - Anfänger-Themen 5
W Matrix übergeben Java Basics - Anfänger-Themen 7
T Matrix transponieren Java Basics - Anfänger-Themen 17
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
D Problem: Werte eine Matrix vergleichen! Java Basics - Anfänger-Themen 5
B Matrix Java Basics - Anfänger-Themen 2
Semox Matrix multiplizieren Java Basics - Anfänger-Themen 4
N Matrix an toString Java Basics - Anfänger-Themen 7
C Diagonale in einem NxN Matrix Java Basics - Anfänger-Themen 6
F Einträgen von Matrix zu sotieren Java Basics - Anfänger-Themen 2
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
S Problem bei Matrix Addition Java Basics - Anfänger-Themen 5
F matrix werte übergeben Java Basics - Anfänger-Themen 5
M Hauptdiagonale Matrix berechnen Java Basics - Anfänger-Themen 6
M Klassenerstellung für Matrix mit Rechenopperationen Java Basics - Anfänger-Themen 42
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
J Matrix ausgeben Java Basics - Anfänger-Themen 9
N Matrix Matrix Produkt Java Basics - Anfänger-Themen 7
N prüfe ob etwas in einer Matrix steht... Java Basics - Anfänger-Themen 14
L rechtecke zeichnen anhand von matrix Java Basics - Anfänger-Themen 27
J Matrix aus Datei einlesen mit StreamTokenizer Java Basics - Anfänger-Themen 3
K Transponiere Matrix Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben