Arrays "automatisch" erstellen lassen

Diskutiere Arrays "automatisch" erstellen lassen im Java Basics - Anfänger-Themen Bereich.
P

Plauzi92

Hallo Leute,

ist es möglich mit einer For- Schleife Arrays zu erstellen? Hab über die Suchfunktion eine ähnliche Frage gefunden, aber die Antwort nicht wirklich verstanden. :D

Ich kann die Anzahl der Arrays und deren Größe am Anfang berechnen. Das ändert sich je nach Größe des am Anfang eingegebenen Arrays. Die bisherigen Versuche scheitern logischerweise an der Namensgebung der Arrays.

Wäre nett wenn jemand einen Tipp hat.

Danke im Voraus :)
 
P

Plauzi92

Das wäre dann die oftmals erwähnte Arraylist oder? Da müsste ich mich dann nochmal rein fuchsen :D
 
H

httpdigest

Die bisherigen Versuche scheitern logischerweise an der Namensgebung der Arrays.
Ein Array bzw. jedes andere Java-Objekt auch, hat keinen Namen. Variablen, in denen du Java-Objekte speicherst, haben Namen. Aber die Objekte selber nicht. Du kannst also z.B. auch eine Million Arrays innerhalb eines einzelnen Arrays speichern und dieses äußere Array einer Variablen (mit einem Namen) zuweisen:
Java:
int n = 1000000;
String[][] arrayVonArrays = new String[][n];
for (int i = 0; i < n; i++) {
  arrayVonArrays[i] = new String[] {"a", "b", "c"};
}
 
P

Plauzi92

Ich habe zu Anfang ein Array mit der Länge x und möchte danach folgend ein Array erstellen das nur noch halb so lang ist. Das nächste ist nur noch halb so lang wie das vorherige bzw ein viertel des ursprünglichen arrays. Das eben so lange bis das letzte Array nur noch eine Stelle hat.

Wenn ich das in einer for-schleife machen würde, brauche ich ja irgendwas um die neuen arrays zu benennen.

Ich hoffe das war einigermaßen verständlich :D
 
W

White_Fox

Nur mal so: ArrayLists kannst du nach Belieben weitere Elemente anfügen:

Java:
ArrayList<SomeObject> list = new ArrayList<>();

list.add(new SomeObject());    //list enthält jetzt ein Objekt von der Art "SomeObject"

list.add(new SomeObject()); //list enthält jetzt ein weiteres Objekt von der Art "SomeObject"
Erst mühsam viele Listen von definierter Länge zu erzeugen könnte unnötig sein.
 
P

Plauzi92

Okay, das mit den Arrays hat funktioniert :)

Im Gesamten komme ich aber einfach nicht weiter. Das ganze Programm soll der Tournamentsort werden. Ich bin immerhin schon mal so weit, dass ich die höchste Zahl des Arrays bestimmen kann. Mir ist aber nicht ganz klar, wie ich diese dann entferne und in dem "Baum" die Lücken füllen kann.

Code:
    public static void main(String args[]) {
        
    
        int [] start = {3,6,1,4,9,5,7,1,2,6,8,7};                                   // Testarray
        int n = start.length;                                                           // Länge des Startarrays
        int m = 1;
        while (m < n) {                                                                  // erste Zweierpotenz ermitteln die größer n ist -> unterste ebene
            m = m*2;
        }
        int x = (int) (Math.log(m)/Math.log(2));                            // Logarithmus dualis von m -> Anzahl der Ebenen
        int ebene = 1;                                                                   // Nächste Ebene der aktuell durchlaufenen
        int [][] Ebenen = new int[x][0];                                          // x ist die Anzahl der Ebenen       
        
        for (int i = 0; i < x; i++) {                                                  // Erstellen der Ebenen, die jeweils nächste ist nur halb so groß
            Ebenen[i] = new int[m];
            m = m/2;
        }
        
        for (int i = 0; i<n; i++) {                                                     // Unterste Ebene mit Werten aus Startarray füllen
            
            Ebenen[0][i] = start[i];
        }
        
        
        while (ebene < x) {                                                            // Solange oberste Ebene nicht erreicht ist       
            int count = 0;                                                                // Zähler 0 setzen
        for (int i = 0; i<Ebenen[ebene-1].length; i=i+2) {           
            if (Ebenen[ebene-1][i] < Ebenen[ebene-1][i+1]) {        // Vergleichen und jeweils höheres Element eine Ebene höher setzen
                    Ebenen[ebene][count] = Ebenen[ebene-1][i+1];   
                    count++;
            }
            else {
                Ebenen[ebene][count] = Ebenen[ebene-1][i];
                count++;
            }
        }ebene = ebene+1;                                                             // In nächste Ebene springen
        }
}
Ich habe auch generell das Gefühl, dass mein jetziger Code nicht wirklich zielführend sein wird. Ich habe im Internet ein Codebeispiel gefunden. Das ist aberwitzig lang und erschließt sich mir dummerweise auch überhaupt nicht.
 
Thema: 

Arrays "automatisch" erstellen lassen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben