Exklusive Präfixsumme

DerDecane

Aktives Mitglied
Servus zusammen, ich soll eine Methode schreiben die mir aus einem gegebenen Array die exklusive Präfixsumme erstellt.
Dazu habe ich ein array mit den Werten {1, 3, 2, 1, 2, 1, 4, 2}. Rauskommen soll ein Array mit den Werten {0, 1, 4, 6, 7, 9, 10, 14}.
Habe dazu folgende Methode geschrieben:
Code:
public static void calcPrefixEx(int[]array){
        int[]test = new int[array.length];
        test = array;
       
        array[1] = test[0];
        array[0] = 0;
       
        for (int i=2; i<array.length; i++){
            array[i] = array[i-1] + test[i-1];
        }
    }
Hab das Ganze bestimmt schon 10 Mal auf Papier durchgerechnet, eigentlich müsste das passen. Ich versteh nicht wo mein Fehler liegt. Wenn ich es laufen lasse, kommt nämlich immer {0, 1, 2, 4, 8, 16, 32, 64}, also quasi eine Zweierpotenzreihe, raus.

Hoffe mir kann jemand helfen ich versteh nicht warums nicht so geht. Auf Papier mach ichs ja genau so wie ichs programmiert hab.
 
Hallo

Mit dieser Zeile weist du test die Referenz von array zu.

Java:
test = array;

Heißt alles was du in array änderst wird auch in test geändert.

Grüße
 
Achsoo, okay. Dann muss ich aber vorher trotzdem das Array test angelegen. Wenn ich das aber nur mit
Code:
int[]test= new int[];
mache meckert eclipse. Muss ich dann
Code:
int[]tmp = new int[array.length];
sowas in der Richtung nehmen oder wie geht das?
 
So sieht sollte dein Code aussehen

Java:
    public static void calcPrefixEx(int[] array) {
        int[] test = new int[array.length];
        System.arraycopy(array, 0, test, 0, array.length);

        array[1] = test[0];
        array[0] = 0;

        for (int i = 2; i < array.length; i++) {
            array[i] = array[i - 1] + test[i - 1];
        }

        for (int a : array) {
            System.out.print(a);
        }
    }

Grüße
 

Zurück
Oben