Matrix auf 4 Elemente untersuchen mit offenen Enden

Mika34

Bekanntes Mitglied
Hallo,
Ich melde mich erneut, obwohl ich nicht weiß, ob es noch zum Anfänger-Thread gehört oder, ob es schon etwas Spezieller ist.
Ich habe momentan ein Problem. Ich habe eine 6x6 Matrix vor mir liegend, welche ich auf 4 Elemente untersuchen soll, die untereinander, nebeneinander oder diagonal angeordnet sind. Im "normalen" Modus, wo die Enden der Matrix geschlossen sind, hat es bei mir gut geklappt.
Jedoch bin ich momentan bei dem Modus, wo die Enden der Matrix ineinander torusartig zusammengehen.
Befindet sich beispielsweise in der Matrix an den Stellen (0,0), (1,0), (4,0) und (5,0) Elemente, so zählt es als eine gültige Anordnung von 4 Elementen innerhalb der Matrix. Jedoch verstehe ich nicht ganz, wie ich das in Code umsetzen soll.
Hat einer von euch so etwas Ähnliches schon einmal gelöst und könnte mir auf die Sprünge helfen?
Ich bin über jede Hilfe tierisch dankbar!

Grüße
 

httpdigest

Top Contributor
Naja, jetzt gibt es ja nicht nur die vier Diagonalen (zwei Diagonalen + umgekehrte Richtung) sondern es gibt insgesamt 8 zu prüfende Linien. Das kann man auch sehr generisch lösen, ähnlich wie die Lösung in deinem anderen Thread.
Du kannst in zwei 8-elementigen int-Arrays die Schrittweite speichern, die die Prüfung der aktuellen "Linie" entlang der x-Koordinate und der y-Koordinate "wandern" soll.
Und für den Index "wrap around" kann ein positiver Modulo verwendet werden (z.B. Math.floorMod()).
Java:
private static final int[] dx = {1, 0, -1, 0, 1, 1, -1, -1};
private static final int[] dy = {0, 1, 0, -1, 1, -1, 1, -1};
public static <T> boolean containsLine(T[][] arr, T[] diag) {
  for (int y = 0; y < arr.length; y++)
    for (int x = 0; x < arr.length; x++)
      for (int l = 0; l < 8; l++)
        if (checkLines(arr, diag, y, x, l))
          return true;
  return false;
}
private static <T> boolean checkLines(T[][] arr, T[] diag, int y, int x, int l) {
  for (int i = 0; i < diag.length; i++)
    if (!arr[Math.floorMod(y + dy[l] * i, arr.length)]
            [Math.floorMod(x + dx[l] * i, arr.length)].equals(diag[i]))
      return false;
  return true;
}
 

Mika34

Bekanntes Mitglied
Somit trennst du wie im anderen Beispiel erneut in die Fälle, ob überhaupt eine Diagonale von 4 Elementen besteht und in der zweiten Methode checkLines wird mir nicht ganz klar, was dort eigentlich vor sich geht, könntest du es mir bitte erklären was es mit dieser Methode auf sich hat?
 

httpdigest

Top Contributor
Sorry, "checkLines" sollte eigentlich "checkLine" heißen. Also: Die erste Methode "containsLine" ist dazu da, einfach über alle Felder der Eingabematrix zu wandern und für jedes Feld alle 8 möglichen Linien zu prüfen. Die tatsächliche Prüfung für jede dieser Linien passiert in der Methode "checkLines" (die eigentlich hätte "checkLine" heißen sollen, sorry).
In "checkLines" (eig. "checkLine"), die ja für jedes Feld der Eingabematrix und für jede mögliche Linie aufgerufen wird, wird dann über alle Indizes des Eingabevektors "diag" gegangen und mit Hilfe der zwei statischen Arrays die Matrix "abgewandert". Die zwei statischen Hilfsarrays dx und dy geben an, in welche Richtung denn für die aktuelle Linie (durch Parameter `l`) gewandert werden soll.
 

Mika34

Bekanntes Mitglied
Könntest du mir bitte noch kurz sagen, wie du auf den Schluss gekommen bist, dass man hier 8 Linien prüfen muss? Denn es gibt doch viel mehr vierer Diagonalen in einer 6x6 Matrix, oder bin ich komplett im Unklaren. Also bezogen auf diesen Torus-Spielmodus
 

httpdigest

Top Contributor
Das sind die Richtungen. Es gibt 8 Richtungen (also genauer gesagt 2 Diagonalen und horizontal sowie vertikal und das dann noch für die umgekehrte Richtung).
 

MoxxiManagarm

Top Contributor
Das sind die Richtungen. Es gibt 8 Richtungen (also genauer gesagt 2 Diagonalen und horizontal sowie vertikal und das dann noch für die umgekehrte Richtung).
8 sind nicht nötig. Wenn du oben links in der Ecke anfängst und in Leserichtung fortfährst brauchst du immer nur 4 Richtungen zu prüfen:
- Ost
- Südost
- Süd
- Südwest
Alle anderen Himmelsrichtungen wurden bereits von vorher besuchten Feldern überprüft.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
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