Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern

ConzT

Mitglied
Hi alle zusammen,

ich bin relativ neu was Java anbelangt(seid ca. einem Jahr auf der Uni damit zu tun)..
Da ich bis jetzt nur stiller Mitleser war und ich bis jetzt hier immer Lösungen zu meinen Problemen gefunden habe erstmal Hi an alle ;-) Bei meinem momentanen Problem weiß ich aber nicht weiter...

Zu meiner Frage:

Ich habe ein zweidimensionales Array:

4 3 3 4 3 4 3 3
1 2 2 1 3 1 2 2
4 3 3 4 3 4 3 3
1 3 3 1 2 1 3 3
4 3 3 4 3 4 3 3
1 2 2 1 3 1 2 2
1 2 2 1 3 1 2 2



Hier sind Zeilen [0,2,5] gleich, [1,6,7] gleich und Zeile 4 nicht.

Was ich machen möchte:

Die erste Zeile extrahiere ich(ich nenne sie mal "ausgangszeile" und speichere sie in einem eindimensionalem Array. Soweit so gut.

Im nächsten Schritt möchte ich die erste Zeile mit der nächsten vergleichen. Fürs vergleichen habe ich auch schon eine Methode geschrieben.

Nun mein Problem. Wenn zwei Zeilen übereinanderstimmen soll die "ausgangszeile" abgespeichert werden.

Wenn ich dann am Ende jede Zeile mit jeder Zeile verglichen habe, hätte ich es gerne so abgespeichert, dass Ich, beispielsweise unter "Key" 1, die Arrays der Zeilen 0,2,5 abspeichere, unter "Key" 2, die Arrays der Zeilen 1,6,7 und unter "Key" 3 das Array der Zeile 4 abspeichere.
die "Keys" sollen je nachdem wie viele Zeilen übereinanderstimmen erhöht werden.

Ich hoffe ihr wisst was ich meine ;-)



Wäre super wenn jemand einen passenden Lösungsvorschlag hat!

Danke euch schon mal!

Lg ConzT
 
Hi, danke für den Link. Aber da hab ich auch nicht das gefunden was ich brauche. Wie ich arrays vergleiche weiß ich ja.
Mein Problem ist wo ich die passenden Zeilen gemeinsam am besten abspeichern wenn diese übereinanderstimmen...
 
Was hast du dir denn vorgestellt was "Key" sein soll? Du könntest die Strings auf Gleichheit überprüfen und in einen neuen String "Key" dann die Inhalte kopieren
 
Als Key hätte ich mir einfach Integer Werte vorgestellt. Unter 1 speichere ich die Arrays der Zeilen 0,2,5 unter 2 die Arrays der Zeilen 1,6,7 usw.. Ich brauche die Zeilen um sie nachher weiterzuverarbeiten. Ich bin mir Momentan nur nicht sicher ob ich derzeit nicht viel zu kompliziert denke..

Mit den Strings habe ich ja dann das selbe Problem oder? Weiß einfach nicht wo und wie ich sie gemeinsam abspeichern...
Hab gerade überlegt ob ich mir einfachhalber nicht einfach die ZeilenNr abspeichern soll. Aber ich weiß nicht wie ich sie gemeinsam abspeichern soll, damit ich auch später weiß, dass diese zusammengehören.

Hoffe du/ihr versteht was ich meine.. sry :/
 
Ein Integer kann meines Wissens nur einen Wert annehmen, daher könntest du die ganzen Integer-Werte aus deinen Arrays ja nicht in einen zusammenpacken... Du könntest eine Abfrage machen, die überprüft ob zwei Arrays gleich sind und mit clone() erstellst du, falls sie gleich sind, einen Klon eines deiner Arrays und nennst ihn z.B. "Key1"...
 
Sry, dass ich mich erst heute wieder melde!
Hab die Lösung zu meinem Problem gefunden, schäme mich ein wenig dafür😉 Wusste nämlich nicht, dass ich in einer Liste auch einfach ein int[] Array abspeichern kann😕😕

Hier mein Code falls er euch interessiert. Bin über alle möglichen Verbesserungsvorschläge glücklich! Auch was vereinfachung usw. angeht.🙂

Java:
package model;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;

import model.*;
public class NichtZusammenhaengend {

    public NichtZusammenhaengend() {
       
    }

   
    public int[][] komponentenMatrix(int[][] adjazenzmatrix) {
        Wegmatrix matrix = new Wegmatrix();
        int[][] adjmatrix = matrix.cloneAdjazenzmatrix(adjazenzmatrix);
       
        ArrayList<Integer> vektor = new ArrayList<>();
        int z = 0;
        int s = 0;
       
        while(s < adjmatrix[0].length){
            vektor.add(adjmatrix[0][s]);
            s++;
        }
       
       
        int[][] komponentenmatrix = new int[adjazenzmatrix.length][adjazenzmatrix[0].length];
       
        z = 0;
        while(z < adjmatrix.length) {
            s = 0;
            while(s < adjmatrix[0].length) {
                if(vektor.get(s) == 1 && adjmatrix[z][s] == 0) {
                    komponentenmatrix[z][s] = 1;
                } else if(vektor.get(s) == 0 && adjmatrix[z][s] == 1) {
                    komponentenmatrix[z][s] = 2;
                } else if(vektor.get(s) == 0 && adjmatrix[z][s] == 0) {
                    komponentenmatrix[z][s] = 3;
                } else if(vektor.get(s) == 1 && adjmatrix[z][s] == 1) {
                    komponentenmatrix[z][s] = 4;
                }
                s++;
            }
            z++;
        }
        return komponentenmatrix;   
    }
   
   
    //ermittelt die anzahl der Komponenten! Muss noch optimiert werden, da ich auch wenn ich schon alle elemente habe, die Schleife weiterläuft und Zeilen auf Gleichheit prüft! Schon geprüfte und aufgenommene Zeilen müssen gelöscht werden!
    public ArrayList<int[]> extractKomponenten(int[][] komponentenmatrix) {
       
       
        ArrayList<int[]> extractKomponenten = new ArrayList<>();
        int j = 0;
        while(j < komponentenmatrix.length) {
            int z = 0;
            int[] vergleichsmatrix = extractColumn(komponentenmatrix, j);
            while(z < komponentenmatrix.length) {
                int[] temparray1 = extractColumn(komponentenmatrix, z);
                if(vergleichen(vergleichsmatrix, temparray1)){
                    if(!wertVorhanden(extractKomponenten, temparray1)) {
                        extractKomponenten.add(temparray1);
                    }
                }
                z++;
            }
            j++;
        }
            return extractKomponenten;
    }
   
   
    public int getAnzahlKomponenten(ArrayList<int[]> komponenten){
        return komponenten.size();
    }
   
    //Prüft ob eine Matrix(Zeile aus der Komponentenmatrix schon in der ArrayList vorhanden ist! Dies ist notwendig, damit ich die anzahl an Komponenten später feststellen kann.
    public boolean wertVorhanden(ArrayList<int[]> extractKomponenten,int[] matrix) {
       
        for(int[] w : extractKomponenten){
            if(vergleichen(w, matrix)) return true;
        }
        return false;
    }
   
    //extrahiert ein array(Zeile) aus einem zweidimensionalem array
    public int[] extractColumn(int[][] komponentenmatrix, int zeile) {
        int z = zeile;
        int[] temparray1 = new int[komponentenmatrix[0].length];
            int s=0;
            while(s< komponentenmatrix[0].length) {
                temparray1[s] = komponentenmatrix[z][s];
                s++;
        }
        return temparray1;       
    }
   
   
   
    public boolean vergleichen(int[] m1, int[]m2) {
        int z = 0;
        boolean gleich = false;
        while(z < m1.length && gleich == false ) {
            if(m1[z] == m2[z]) {
                z++;
            } else return false;
        }
        return true;
    }
}


Hier noch die matrix, welche ich an die Methode komponentenMatrix übergebe:

Java:
int[][] matrix1 = {{1,0,0,1,0,1,0,0},{0,1,1,0,0,0,1,1},{1,0,0,1,0,1,0,0},{0,0,0,0,1,0,0,0},{1,0,0,1,0,1,0,0},{0,1,1,0,0,0,1,1},{0,1,1,0,0,0,1,1}};

Danke schon mal!
 

Zurück
Oben