Portal > Foren > Java > Allgemeine Java-Programmierung > Array transponieren ... Logik-Denkblockade ...
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 02.02.2005, 11:23 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.548
Standard Array transponieren ... Logik-Denkblockade ...

Also ... meine erste Frage in diesem Forum .. *g*

Ich stehe gerade so dermaßen auf dem Schlauch. Das ist fast nicht mehr schön. Zu wenig geschlafen, zu viel Stress .. keine Ahnung ..

Folgendes Problem:

Ich habe folgendes Interface
Code:
public interface TableData
{
  public static final Object[][] DATA = {
    {"1",  "2",  "3",  "4"},
	{"5",  "6",  "7",  "8"}
  };

  public static final String[] COLHEADS = {
    "Spalte1", "Spalte2", "Spalte3", "Spalte4"
  };

}
Dort werden, wie man sieht, Spaltennamen und Inhalte definiert.

Ich möchte dies nun in einer Tabelle darstellen. Alles gar kein Problem, sofern ich einfach nur setValueAt()
der Klasse JTable verwende.

Okay. Ich möchte nun aber folgende Darstellung haben:

Anstatt
Code:
Spalte1 Spalte2 Spalte3 Spalte4
  1       2       3       4      
  5       6       7       8
möchte ich es so darstellen
Code:
Spalte1  1  5 
Spalte2  2  6
spalte3  3  7
Spalte4  4  8

Aber ich komme gar nicht bis zur Tabelle. Da ist irgendwie eine logische Denkblockade.
Gehen wir mal davon aus, dass ich oben dargestelltes zweidimensionales Array habe.

Ich "murkse" hier derzeit mit diesem Code rum .. der ist grottenschlecht, das weiß ich .. aber so etwas wie
heute ist mir auch noch nicht passiert.
Ich raff es einfach nicht *g*

Code:
public class TableDemo implements TableData
{
    public static void main( String[] args )
    {
        // Neues 2-dim. Array anlegen.
        // Zeilen und Spalten werden durch das DATA-Array aus dem Interface "TableData"
        // bestimmt
        Object[][] neu = new Object[DATA[0].length][DATA.length+1];

        int spalten  = neu.length;
        int zeilen   = neu[0].length;

        // Testausgabe
        System.out.println("Spalten" + spalten );
        System.out.println("Zeilen" + zeilen);


        for( int i = 0; i < spalten; i++ )
        {
            // Start: Testausgabe
            System.out.print( i + " | ");

            // Zuweisung
            neu[i][0] = COLHEADS[i];

            for( int j = 1; j < zeilen-1; j++ )
            {
                // Fortführung: Testausgabe
                System.out.print( "i,j" + i + "," + j + " " );

                // Zuweisung
                neu[i][j] = DATA[i][j];
            }

            // Ende: Testausgabe
            System.out.println("");
        }



        // Array soll ausgegeben werden ... erst mal nicht so wichtig, da komme ich nämlich gar
        // nicht hin
        for( int i = 0; i < neu.length; i++ )
        {
            for( int j = 0; j < neu[0].length; j++ )
            {
                System.out.print( neu[i][j] + " ");
            }
            System.out.println("");
        }

    }

}
Ich erhalte folgende Fehlermeldung, wenn ich Kompilieren will:
Code:
Spalten4
Zeilen3
0 | i,j0,1 
1 | i,j1,1 
java.lang.ArrayIndexOutOfBoundsException: 2
	at [..].TableDemo.main(TableDemo.java:51)
	[..]
Exception in thread "main" 2 | i,j2,1

Kann mir da mal irgendwer weiterhelfen?
Ich verzweifel hier noch ...

Ich danke Euch.

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.02.2005, 12:38 Nach oben    #2
Fuzzy
Gast
 
Beiträge: n/a
Standard

Also, DATA ist ein 3er Array mit Unterarrays der Länge 5.

DATA.length ist also 3, DATA[0].length ist also 5.

Jetzt weiß ich nicht was Du machen willst. Soll jetzt neu ein 4er Array mit der Länge 5 sein oder ein 3er Array der Länge 6? Du hast höchstwahrscheinlich beim Anlegen die Dimensionen vertauscht weil Splaten stehen bei Dir in der ersten Klammer und Zeilen in der zweiten, während beim Anlegen legst Du erst die Zeilen und dann die Spalten an?!?

Anschließend läßt Du j von 1 bis n-1 laufen, also wird die Zeile 0 von DATA niemals ausgelesen.Zudem läuft der Zähler nur bis n-1 statt bis n.

Das sind die Fehler die ich auf Anhieb entdecke.

Viel Erfolg beim weitersuchen!
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.02.2005, 12:58 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.548
Standard

hm. ja. ich geh auch gleich nach hause .. das wird hier ja heute nix mehr ..

deine aussagen kann ich nachvollziehen.
was meinst du aber mit 4er-array (etc.)?

neu sollte soviele zeilen haben, wie DATA spalten und so viele spalten, wie DATA zeilen +1.

das "+1" kommt durch die spaltennamen, die ja noch hinzukommen müssen.

verstehst du, was ich machen will?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.02.2005, 13:07 Nach oben    #4
Fuzzy
Gast
 
Beiträge: n/a
Standard

in dem Fall wirst Du zum transponieren i und j bei der Zuweisung vertauschen müssen (in etwa so

java Code:
  1. for( int j = 1; j < zeilen; j++ )
  2.             {
  3.                 // Fortführung: Testausgabe
  4.                 System.out.print( "i,j" + i + "," + j + " " );
  5.  
  6.                 // Zuweisung
  7.                 neu[i][j] = DATA[j-1][i];
  8.             }

Ausserdem hast Du einen Spaltentext zu wenig deklariert.

Geändert von Ben (31.12.2005 um 15:34 Uhr)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.02.2005, 13:17 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.548
Standard

sorry. das mit dem spaltentext ist schon richtig. habe es oben editiert.
ic hwerde das gleich mal testen.

wei o wei .. ich sollte heute abend früh ins bett gehen ..

danke dir auf jeden fall. werde mich nochmals melden.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.02.2005, 11:26 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.548
Standard

mensch mensch mensch.
gerade nochmal hingesetzt und .. sorry .. ich bin total am ende ^^

ich hatte das problem chon vor wochen gelöst, aber nur den code nicht wiedergefunden und war nicht in der lage es nochmals zu rekonstruieren.

aber nun gut ... jetzt hab ich ihn doch gefunden:

Aufrufende Klasse: "TableDemo"
Java Code:
  1. public class TableDemo implements TableData
  2. {
  3.     public static void main( String[] args )
  4.     {
  5.         TransposedTable transposed = new TransposedTable( COLHEADS, DATA );
  6.  
  7.         Object[][] tableData = transposed.getJoinedData();
  8.  
  9.         // Testausgabe
  10.         for( int row = 0; row < tableData.length; row++ )
  11.         {
  12.             for( int col = 0; col < tableData[0].length; col++ )
  13.             {
  14.                  System.out.print( " " + tableData[row][col] );
  15.             }
  16.             System.out.println( "" );
  17.         }
  18.  
  19.         System.out.println( "
  20.  
  21. " );
  22.         Object[][] transposedTableData = transposed.transposeCompleteTable();
  23.  
  24.  
  25.         // Testausgabe
  26.         for( int row = 0; row < transposedTableData.length; row++ )
  27.         {
  28.             for( int col = 0; col < transposedTableData[0].length; col++ )
  29.             {
  30.                  System.out.print( " " + transposedTableData[row][col] );
  31.             }
  32.             System.out.println( "" );
  33.         }
  34.  
  35.     }
  36.  
  37. }


Klasse: "TransposedTable"
Java Code:
  1. public class TransposedTable
  2. {
  3.     private Object[] colheads;
  4.     private Object[][] data;
  5.  
  6.     private Object[][] tableData;
  7.  
  8.  
  9.     public TransposedTable( Object[] colheads, Object[][] data )
  10.     {
  11.         this.colheads = colheads;
  12.         this.data     = data;
  13.     }
  14.  
  15.     /**
  16.      *  zum Test wird hier einfach mal das "gejointe" Array zurückgegeben
  17.      *
  18.      * @return Object[][]
  19.      */
  20.     public Object[][] getJoinedData()
  21.     {
  22.         return joinColheadsAndData();
  23.     }
  24.  
  25.  
  26.     /**
  27.      *  Der Inhalt der beiden Arrays wird zu einem zusammengebaut.
  28.      *
  29.      * @return Object[][]
  30.      */
  31.     private Object[][] joinColheadsAndData()
  32.     {
  33.         int rowcount  = data.length;
  34.         int columncount = colheads.length;
  35.         Object[][] joined = new Object[rowcount + 1][columncount];
  36.  
  37.         for( int col = 0; col < columncount; col++  )
  38.         {
  39.             joined[0][col] = colheads[col];
  40.         }
  41.  
  42.  
  43.         for( int row = 0; row < rowcount; row++ )
  44.         {
  45.             for( int col = 0; col < columncount; col++ )
  46.             {
  47.                 joined[row+1][col] = data[row][col];
  48.             }
  49.         }
  50.  
  51.         return joined;
  52.     }
  53.  
  54.  
  55.     /**
  56.      * Das "gejointe" Array wird transponiert.
  57.      *
  58.      * @return Object[][]
  59.      */
  60.     public Object[][] transposeCompleteTable()
  61.     {
  62.         Object[][] tableData = this.joinColheadsAndData();
  63.  
  64.         int rowcount  = tableData.length;
  65.         int columncount = tableData[0].length;
  66.  
  67.         Object[][] transposedTableData = new Object[columncount][rowcount];
  68.  
  69.         for( int col = 0; col < columncount; col++ )
  70.         {
  71.             for( int row = 0; row < rowcount; row++ )
  72.             {
  73.                 transposedTableData[col][row] = tableData[row][col];
  74.             }
  75.         }
  76.  
  77.         setTableData( transposedTableData );
  78.  
  79.         return transposedTableData;
  80.     }
  81.  
  82.  
  83.     public void setTableData( Object[][] tableData )
  84.     {
  85.         this.tableData = tableData;
  86.     }
  87.  
  88. }

eventuell hilft es ja irgendwem weiter.


grüße ben.


edit:
btw: der java-highlighter ist aber auch verbuggt ..
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zend Framework - Probleme mit Zend_Controller_RewriteRouter bzw. Form der URLs Ben PEAR, PECL und Frameworks 12 24.12.2006 17:17
Suche Hilfe: Angebot und Nachfrage berechnen ljungi Plauderecke 6 17.12.2006 22:10
Array in Bezug auf ein anderes sortieren... code5 PHP-Programmierung 2 15.05.2006 15:56
Array: Undefined Index Skinwalker PHP-Programmierung 10 29.03.2006 14:23
Ein Array in ein Array schreiben bacarni PHP-Programmierung 2 07.02.2006 14:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.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 36 37 38 39 40 41 42 43 44 45