Collections Ist eine Arraylist hier das richtige?

Loddakwin

Aktives Mitglied
Ich will in einer Arraylist arrays vom Typ Integer speichern das funktioniert soweit auch. Die arrays haben eine größe von N = 100, 1000, 10000, 100000, 1000000 für diese größen soll es jeweils 10 arrays geben und diese sollen dann mit Werten befüllt werden. Mein Problem ist wenn ich die arrays an meine sortier Algorithmen übergebe die zu 100% einwandfrei laufen bekomme ich eine Nullpointer exception, weil in meinen arrays null-Werte gespeichert werden. Das versteh ich nicht, da ich extra angebe wie groß die arrays werden dürfen?

Mein Code:
Code:
public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        ArrayList<Integer[]> arrays100 = new ArrayList<Integer[]>(10);
        ArrayList<Integer[]> arrays1000 = new ArrayList<Integer[]>(10);
        ArrayList<Integer[]> arrays10000 = new ArrayList<Integer[]>(10);
        ArrayList<Integer[]> arrays100000 = new ArrayList<Integer[]>(10);
        ArrayList<Integer[]> arrays1000000 = new ArrayList<Integer[]>(10);

        Integer array1[] = new Integer[100];
        Integer array2[] = new Integer[1000];
        Integer array3[] = new Integer[10000];
        Integer array4[] = new Integer[100000];
        Integer array5[] = new Integer[1000000];

        long beforeSort;
        long afterSort;
        long nanoSeconds;
        long microSeconds;

        while (true) {

            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array1[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array1);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array2[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array2);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array3[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array3);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array4[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array4);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array5[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array5);
            }

            ArrayList<Integer[]> copy1 = (ArrayList<Integer[]>) arrays100.clone();
            ArrayList<Integer[]> copy2 = (ArrayList<Integer[]>) arrays1000.clone();
            ArrayList<Integer[]> copy3 = (ArrayList<Integer[]>) arrays10000.clone();
            ArrayList<Integer[]> copy4 = (ArrayList<Integer[]>) arrays100000.clone();
            ArrayList<Integer[]> copy5 = (ArrayList<Integer[]>) arrays1000000.clone();


            System.out.println("Enter number (1-5)): ");
            int number = input.nextInt();

            if (number == 1) {

                // for(int i = 0; i < arrays100.size(); i++) {
                System.out.println(Arrays.toString(arrays100.get(1))); // hier wird mir angezeigt das null werte in meinem array sind
                Sorter.insertionsort(arrays100.get(1)); // hier wird das array übergeben 

                // }


            } else
                break;
        }
    }

Vielleicht ist die Arraylist hier nicht das richtige ? Oder kann man die null Werte irgendwie löschen?

LG
 
Also eine Lösung würde mich auch İnteressieren. Hast du schonma den debugger laufen lassen und kontrolliert, auch die gewollten werten in die Arraylist eingefügt wird?

Werden bei der ausgabe nur null angezeigt oder sind auch wirklich andere werte dabei?
 
Ja die gewollten Werte sind natürlich vorhanden. Das Problem ist das nach den gewollten Werten null-Werte folgen.

Ich hoffe es gibt dazu eine Lösung..

Zuvor wollte ich es mit einem Zwei-dim array lösen doch das funktioniert nicht weil ein ein-dim array erwartet wird und die Methoden Signatur nicht verändert werden darf.
 
Es werden ja nur vom array100 immer wieder die ersten 10 werte gefüllt. Aber ich frag mich ob man wirklich eine größe für eine Arraylist angeben soll?

Versuch es ma ohne wenn es klappt.
 
Danke stq es lag an den for-schleifen, blöde copy-paste fehler 😀

Ausgebessert soll es so aussehen, mir wäre zumindest kein Fehler aufgefallen(bis jetzt 😀):

Code:
for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array1.length; j++) {
                    array1[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array1);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array2.length; j++) {
                    array2[j] = (int) (Math.random() * 1000000);
                }
                arrays1000.add(i, array2);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array3.length; j++) {
                    array3[j] = (int) (Math.random() * 1000000);
                }
                arrays10000.add(i, array3);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array4.length; j++) {
                    array4[j] = (int) (Math.random() * 1000000);
                }
                arrays100000.add(i, array4);
            }
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < array5.length; j++) {
                    array5[j] = (int) (Math.random() * 1000000);
                }
                arrays1000000.add(i, array5);
            }

War klar das es nicht funktioniert, da die größe immer vom array1 genommen wurde und das array2 aber viel größer war und default wird eben null gesetzt
 
mir wäre zumindest kein Fehler aufgefallen(bis jetzt 😀):

Dein Code
Java:
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < array1.length; j++) {
        array1[j] = (int) (Math.random() * 1000000);
    }
    arrays100.add(i, array1);
}

Macht (vom Endresultat gesehen her) das gleiche, wie
Java:
for (int j = 0; j < array1.length; j++) {
    array1[j] = (int) (Math.random() * 1000000);
}
for (int i = 0; i < 10; i++) {
    arrays100.add(i, array1);
}

Das meinte ich weiter oben mit "wahrscheinlich nicht das, was du erwartest".
 
Was mir jetzt gerade aufgefallen ist, ist das glaube ich nicht 10 verschiedene arrays in die Arraylist eingetragen werden kann das sein? Weil bei der Ausgabe bekomme ich 10 mal das gleich sortierte Array sollte aber eigentlich abwechselnd sein einmal unsortiert einmal sortiert.

Code:
for(int i = 0; i < arrays100.size(); i++) {
                    System.out.println(Arrays.toString(arrays100.get(i)));
                    Sorter.insertionsort(arrays100.get(i));
                    System.out.println(Arrays.toString(arrays100.get(i)));
                }
 
So nun sollte es passen, die Arrays müssen natürlich in der for-schleife erstellt werden 🙂
Code:
for (int i = 0; i < 10; i++) {
                Integer array1[] = new Integer[100];
                for (int j = 0; j < 100; j++) {
                    array1[j] = (int) (Math.random() * 1000000);
                }
                arrays100.add(i, array1);
            }
            for (int i = 0; i < 10; i++) {
                Integer array2[] = new Integer[1000];
                for (int j = 0; j < 1000; j++) {
                    array2[j] = (int) (Math.random() * 1000000);
                }
                arrays1000.add(i, array2);
            }
            for (int i = 0; i < 10; i++) {
                Integer array3[] = new Integer[10000];
                for (int j = 0; j < 10000; j++) {
                    array3[j] = (int) (Math.random() * 1000000);
                }
                arrays10000.add(i, array3);
            }
            for (int i = 0; i < 10; i++) {
                Integer array4[] = new Integer[100000];
                for (int j = 0; j < 100000; j++) {
                    array4[j] = (int) (Math.random() * 1000000);
                }
                arrays100000.add(i, array4);
            }
            for (int i = 0; i < 10; i++) {
                Integer array5[] = new Integer[1000000];
                for (int j = 0; j < 1000000; j++) {
                    array5[j] = (int) (Math.random() * 1000000);
                }
                arrays1000000.add(i, array5);
            }
 

Zurück
Oben