Zufalls Array summieren

Ich habe ein array z.B 1,2,3,4 .. und möchte die Elemente bei jedem durchlauf mit dem Nachbar addieren, die Ausgabe sollte bspw so aussehen:

Output:
20
8 12
3 5 7.

So das am Ende nur noch ein Element übrig bleibt. Ich möchte auch die Zwischenschritte ausgeben lassen. Mein Code sieht bis jetzt so aus:



Code:
int [] randomarray = {1,2,3,4};
    System.out.print("Das  Array: ");
    //for(int index: randomarray){
    for (int index = 0; index < randomarray.length; ++index) {
        System.out.print(randomarray[index] + " ");
    }
    System.out.println();
    System.out.println("_____________________________________");
    System.out.println();

    sum(randomarray, randomarray.length);



}




public static void sum(int [] array, int n){

    int summ = 0;

    for(int i = 0; i < n - 1; i++) {

        summ = array + array[i + 1];

        System.out.print("[" + summ + "]" + " ");
    }

}

}

In meiner Methode bekomme ich nur den ersten Schritt "3 5 7", wie kann ich mit diesem Ergebnis weiter rechnen? so das jetzt 3 mit der 5 die 5 mit der 7 usw addiert wird, so dass nur noch ein Element übrig bleibt? Ich bin seit gestern schon am ausprobieren aber bis jetzt hat nichts funktioniert.. Ich wäre dankbar für leicht verständliche Vorschläge. Danke im Voraus :)
 
Zuletzt bearbeitet:
Hallo und erst einmal willkommen im Forum.

Die erste Bitte wäre: Bitte poste Code immer in [CODE=java][/CODE] tags oder nutz die Funktionalität des Menüs (... -> Code)

Im Augenblick gibst Du die summe nur immer aus. Wenn Du mit dieser weiter rechnen möchtest, dann müsstest Du Dir einmal überlegen
a) wie kannst Du die Werte denn speichern?
b) wie kannst Du diese Werte ggf. aus der Methode zurück geben?
c) Wenn du die Methode immer wieder aufrufst: Wie lange müsstest Du das erneut aufrufen?
 
Hallo und erst einmal willkommen im Forum.

Die erste Bitte wäre: Bitte poste Code immer in [CODE=java][/CODE] tags oder nutz die Funktionalität des Menüs (... -> Code)

Im Augenblick gibst Du die summe nur immer aus. Wenn Du mit dieser weiter rechnen möchtest, dann müsstest Du Dir einmal überlegen
a) wie kannst Du die Werte denn speichern?
b) wie kannst Du diese Werte ggf. aus der Methode zurück geben?
c) Wenn du die Methode immer wieder aufrufst: Wie lange müsstest Du das erneut aufrufen?

So habs umgeändert, danke für den Tipp:)
Das erste habe ich mir auch schon überlegt, aber das gibt mir nur das aktuelle Element und nicht das ganze, "array". Ich müsste die Methode so lange aufrufen bis nur noch ein Element übrig ist, am besten eine if Bedingung rein schreiben?
 
So habs umgeändert, danke für den Tipp:)
Das erste habe ich mir auch schon überlegt, aber das gibt mir nur das aktuelle Element und nicht das ganze, "array". Ich müsste die Methode so lange aufrufen bis nur noch ein Element übrig ist, am besten eine if Bedingung rein schreiben?
Deine Überlegungen sind doch gar nicht verkehrt. Du müsstest also die Methode immer wieder aufrufen. Der Parameter ist ein Array, du benötigst also ein Array, das in deiner Methode erstellt und befüllt wird (mit den Summen). Die Länge dieses Arrays kennst du auch, denn durch die Aufsummierung ist es immer ein Element kleiner, als das Ursprüngliche.
 
Ich bin nicht gut im Kopfrechnen, aber ads müsste die gewünschte Ausgabe erzeugen:
Java:
	public static void summieren(int... a) {
		for (int i = 1; i < a.length; i++) {
			for (int j = 0; j < a.length - i; j++) {
				a[j] = a[j] + a[j + 1];
				System.out.print(a[j] + " ");
			}
			System.out.println("");
		}
	}

	public static void main(String[] args) {
		summieren(1, 2, 3, 4, 5, 6, 5, 4, 3);
	}
Java:
3 5 7 9 11 11 9 7 
8 12 16 20 22 20 16 
20 28 36 42 42 36 
48 64 78 84 78 
112 142 162 162 
254 304 324 
558 628 
1186
Hierbei ist zu beachten, dass int... eine Array is und man keine zusätzlichen Arrays brauch...
 
Ich bin nicht gut im Kopfrechnen, aber ads müsste die gewünschte Ausgabe erzeugen:
Java:
    public static void summieren(int... a) {
        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length - i; j++) {
                a[j] = a[j] + a[j + 1];
                System.out.print(a[j] + " ");
            }
            System.out.println("");
        }
    }

    public static void main(String[] args) {
        summieren(1, 2, 3, 4, 5, 6, 5, 4, 3);
    }
Java:
3 5 7 9 11 11 9 7
8 12 16 20 22 20 16
20 28 36 42 42 36
48 64 78 84 78
112 142 162 162
254 304 324
558 628
1186
Hierbei ist zu beachten, dass int... eine Array is und man keine zusätzlichen Arrays brauch...
Hatte auch schon überlegt mit zwei for schleifen ran zu gehen .. Vielen Dank!
 
Also wenn man die Fragen von mir noch einmal aufgreift, dann kann man recht schnell auf eine Lösung kommen, die eben rekursiv so etwas macht.

Also wenn Du das Array bearbeitest, dann kommt ein neues Array heraus. Und zwar mit genau einem Feld weniger.
Und das Ergebnis willst Du zurück geben, also müsste der Typ von void auf so ein Array geändert werden.

Damit Du mit dem Ergebnis weiter arbeiten kannst, solltest Du dieses beim Aufruf natürlich in einer Variablen merken.

Und da es ja mehrfach aufgerufen werden kann, ist nicht ein if sondern eine Schleife notwendig.

Und zur Ausgabe hast Du ja schon einen kurzen Code: Evtl. willst Du den ja einmal in eine Methode packen?

Dann hättest Du aus meiner Sicht auch eine saubere Lösung, bei der die Ausgangsdaten eben nicht "zerstört" werden sondern lediglich als Basis für deine Berechnungen dienen (Was ein übliches Vorgehen ist bei vielen Anforderungen später).
 
Also wenn man die Fragen von mir noch einmal aufgreift, dann kann man recht schnell auf eine Lösung kommen, die eben rekursiv so etwas macht.

Also wenn Du das Array bearbeitest, dann kommt ein neues Array heraus. Und zwar mit genau einem Feld weniger.
Und das Ergebnis willst Du zurück geben, also müsste der Typ von void auf so ein Array geändert werden.

Damit Du mit dem Ergebnis weiter arbeiten kannst, solltest Du dieses beim Aufruf natürlich in einer Variablen merken.

Und da es ja mehrfach aufgerufen werden kann, ist nicht ein if sondern eine Schleife notwendig.

Und zur Ausgabe hast Du ja schon einen kurzen Code: Evtl. willst Du den ja einmal in eine Methode packen?

Dann hättest Du aus meiner Sicht auch eine saubere Lösung, bei der die Ausgangsdaten eben nicht "zerstört" werden sondern lediglich als Basis für deine Berechnungen dienen (Was ein übliches Vorgehen ist bei vielen Anforderungen später).
Vielen Dank für die Tipps! :)
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben