[JAVA] - Übergebene Matrix auf Symmetrie prüfen
Results 1 to 2 of 2
  1. #1

    Title
    Veteran
    Join Date
    Apr 2017
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Übergebene Matrix auf Symmetrie prüfen

    Hallo,

    ich habe ein Problem. Ich soll eine Matrix (2D-Array) auf die Symmetrie-Eigenschaft und null-Parameter überprüfen. Symmetrisch ist die Matrix,wenn sie Quadratisch ist und mit ihrer Transponierten Matrix übereinstimmt. Das Programm wird mithilfe eines Überprüfungstools bewertet und dementsprechend keine Fehler angezeigt. Durch das Tool bekomme ich eine vorgegebene Matrix übergeben. Diese lautet {1,2,3},{4,2},{5}. Wenn ich diese transponieren will, müsste ich die restlichen Felder im Array eigentlich mit 0 auffüllen, leider weiß ich nicht wie ich das machen soll.

    Mein Ansatz
    Code:
    public static boolean isSymmetric(int[][] m)
        {
            int laenge = 0;
            boolean sym = false;
            
            if(m == null)
            {
                sym = false;
            }
            else
            {
                int[][] trans = new int[m[0].length][m.length];
                for(int l = 0; l < m.length; l++)      //Das längste Element des Arrays auslesen
                {
                    if(laenge < m[l].length)
                    {
                        laenge = m[l].length;
                    }
                }
                for(int i = 0; i < m.length; i++)
                {
                    if(m[i] == null)
                    {
                        sym = false;
                    }
                    else
                    {
                        if(m.length == m[i].length)
                        {
                            
                            for(int k = 0; k < m[0].length; k++)
                            {
                                for(int j = 0; j < m.length; j++)
                                {
                                    trans[k][j] = m[j][k];
                                    
                                        if(trans[k][j] == m[j][k])
                                        {
                                        sym = true;
                                        }
                                        else
                                        {
                                            sym = false;
                                        }
                                }
                            }
                        }
                        else
                        {
                            sym = false;
                        }
                    }
                }
            }
            return sym;
        }
    Last edited by PeterMller; 20-04-2017 at 08:37.

  2. #2

    Title
    Master
    Join Date
    Feb 2013
    Posts
    108
    Thanks
    12
    Thanked 37 Times in 34 Posts
    Bin mir nicht sicher ob ich das richtig verstehe, aber wenn die vorgegebene Matrix {1,2,3},{4,2},{5} lautet, heißt das dann sie sieht so aus:
    1 2 3
    4 2 0
    5 0 0

    Falls die Matrix immer so übergeben wird, sollte es nicht schwer sein auf Symmetrie zu überprüfen, es ist auch gar nicht notwendig die nicht angegebenen Felder mit 0 aufzufüllen. Wenn du die for-Schleifen umdrehst und in der inneren Schleife m[j] verwendest, d.h.
    Code:
    for(int j = 0; j < m.length; j++) {
    for(int k = 0; k < m[j].length; k++) {
    if(m[j][k] != m[k][j]) {
    return false;
    }
    }
    }
    sollten die 0er gar nicht überprüft werden, da sowieso klar ist, dass diese immer übereinstimmen. Beachte auch, dass sobald einmal sym = false gesetzt wird, die Matrix nicht mehr symmetrisch sein kann, du solltest daher wie im Code oben gleich ein return false verwenden. Bei deinem Code kann es vorkommen, dass sym nochmals auf true gesetzt wird, obwohl die Matrix nicht symmetrisch ist.

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •