# Ich bin einfach zu blöd..



## Kremsn (8. Jun 2009)

einen einfachen Pseudocode in Java umzusetzen. Die Aufgabe: Der Alorithmus soll aus einer Folge X von N Zahlen die maximale Summe aller Elemente in einer Zusammenhängenden Teilfolge berechnen.

Für die Eingabefolge X[1..10]

{31, -41, 59, 26, -53, 58, 97, -93, -23, 84}

ist die Summe der Teilfolge X[3..7]  mit Wert 187 die Lösung des Problems.


der Pseudocode: 

maxtsum:=0;
*for* u:=1 *to* N *do*
*for* o:=u *to* N *do*
*begin*
         {bestimme die Summe der Elemente in der Teilfolge X[u..o]}
          Summe:= 0
*for* i := u *to* o *do* Summe := Summe + X_;
          {bestimme den größeren der beiden Werte Summe und maxtsume}
           maxtsumme := max(Summe, maxtsumme)
*end*

und mein Quellcode sieht dann so aus:



		Java:In die Zwischenablage kopieren


public class Teilsumme {
	
	static int Teilsum(int[] array){
		
		int maxtsum = 0;
		
		for(int u = 1; u< array.length; u++){
			
			for (int o= u; o<array.length; o++){
				
				maxtsum +=array[o];
			
					
				int summe = 0;
				
				for (int i = u; i<=o; i++){
					
					
					summe =+ array[i];
					
					
					if (maxtsum < summe)
						 maxtsum=summe;
					
					}
					
				}
			}
		return maxtsum;
		}
		
				
		
		
		
public static void main(String[] args){
	
	int Teilsum = Teilsum(new int[]{31,-41,59,26,-53,58,97,-93, -23, 84});
	System.out.println(Teilsum);
	
	
}
	}


Liegt wahrscheinlich weniger daran, dass mein Java schlecht ist, als vielmehr daran, dass ich die Funkionsweise des Algoritmus nicht peile.

Wär echt dankbar für Hilfe_


----------



## ck2003 (8. Jun 2009)

```
static int teilsum(int[] array) {//methoden lieber klein schreiben
		int maxtsum = 0;
		for (int u = 0; u < array.length; u++) { // Die erste Stelle in arrays ist die 0
			for (int o = u; o < array.length; o++) {

				// maxtsum +=array[o]; falsch, du sollst in maxtsum die größte teilsumme speichern. die berechnest du
				// aber erst unten in Zeile 10-12, hier veränderst du jedesmal dein bisher gefundenes ergebnis

				int summe = 0;
				for (int i = u; i <= o; i++) {
					summe += array[i]; // nicht =+
				}
				// es reicht, wenn du das überprüfst, wenn du die teilsumme komplett berechnet hast
				if (maxtsum < summe)
					maxtsum = summe;
			}
		}
		return maxtsum;
	}
```


----------



## Kremsn (9. Jun 2009)

Hi ,

danke für deine Hilfe, hat geklappt. Aber warum ist im Pseudocode zwischen der 2.ten und der 3.ten Schleife vermerkt ich soll die Elemente der Teilsumme X[u..o] berechnen, wenn der 2.ten und 3.ten Schleife doch garnix gemacht werden muss? Das hat mich durcheinander gebracht


----------

