# While-Schleife:Zahlen summieren?



## Dino (16. Nov 2006)

Hilfe!
Wie kann man in Java Programm alle Zahlen zur Summe bringen.
Z.B. gibt man im Textfeld die Zahl 6 ein, so erschein im Ergebnis-Feld das Ergebnis 21 (1+2+3+4+5+6).

Bitte, wer weiß , HELP


----------



## EOB (16. Nov 2006)

hi, na du nimmst die zahl, ziehst sie von sich selber ab und addierst eins dazu...dann biste bei eins. dann in einer forschleife von 1 bis die zahl durchlaufen und in jedem durchlauf den index drauf addieren.

gruesse


----------



## Wildcard (16. Nov 2006)

rekursiv ist schöner:

```
int add(int zahl)
{
    if(zahl==1)
         return 1;
   return zahl+add(zahl-1);
}
```


----------



## Yzebär (18. Nov 2006)

@Dino
Das nennt man übrigens Fakultät. 

@Wildcard
Bist du sicher, daß du nicht etwas vergessen hast?


----------



## Wildcard (18. Nov 2006)

Yzebär hat gesagt.:
			
		

> @Dino
> Das nennt man übrigens Fakultät.
> 
> @Wildcard
> Bist du sicher, daß du nicht etwas vergessen hast?


Nein, das ist keine Fakultät.
Prüfung auf Zahlen <1 kriegt er alleine hin


----------



## Yzebär (18. Nov 2006)

Wildcard hat gesagt.:
			
		

> Nein, das ist keine Fakultät.


Richtig, aber es gab doch nen Namen dafür... wenn der mir nur einfallen würde...



> Prüfung auf Zahlen <1 kriegt er alleine hin


Prüfung <1 ist nicht ganz korrekt. Ich würde auch noch die Größe der Zahl begrenzen.


----------



## Wildcard (18. Nov 2006)

Warum?
Wenn du die Größe beschränken wolltest müsstest du erst ausrechnen ab wann Integer.MAX_VALUE überschritten wird.
Für eine Übungsaufgabe IMO ziemlich nutzlos.


----------



## Caesar (19. Nov 2006)

1 + 2 + 3 + ... + n = (n (n + 1)) / 2
oder?

1+2+3+4+5+6 = 21 = (6*7) / 2


----------



## Gast (19. Nov 2006)

Dankeschön !!!


----------



## Dino (19. Nov 2006)

Caesar hat gesagt.:
			
		

> 1 + 2 + 3 + ... + n = (n (n + 1)) / 2
> oder?
> 
> 1+2+3+4+5+6 = 21 = (6*7) / 2



(6*7)/2=21,5....................


----------



## LoN_Nemesis (19. Nov 2006)

6*7 ist 42? 42 geteilt durch 2 ist 21?

Im übrigen kommt bei n * (n+1) immer eine gerade Zahl heraus, da entweder n oder n+1 gerade ist. Von daher kann da nichts mit ,5 rauskommen.


----------



## Yzebär (20. Nov 2006)

Wildcard hat gesagt.:
			
		

> Warum?
> Wenn du die Größe beschränken wolltest müsstest du erst ausrechnen ab wann Integer.MAX_VALUE überschritten wird.
> Für eine Übungsaufgabe IMO ziemlich nutzlos.



Hat die JVM einen unbegrenzt großen Callstack? Wenn ich große Zahlen eingebe, gibt es ja auch ziemlich viele Methodenaufrufe.


----------



## Wildcard (20. Nov 2006)

Nicht unbegrenzt, sondern variable (VM-Parameter).
Integer.MAX_VALUE wird bei dieser Funktion aber wesentlich früher erreicht  :wink:


----------



## Illuminatus0301 (20. Nov 2006)

> Wildcard hat folgendes geschrieben::
> Nein, das ist keine Fakultät.
> 
> Richtig, aber es gab doch nen Namen dafür... wenn der mir nur einfallen würde...



Also wie das heißt weiß ich auch nicht, ich weiß nur das Fakultät X = X! = X * (X-1) * ... * 2 * 1 ist.

Aber ich frage micht, was so ein nettes Thema in der Kategorie "Java Applets & Java Webstart" macht! Das würde doch besser bei "Mathematik" passen, oder nicht!?!


----------



## SlaterB (20. Nov 2006)

http://www.mathematische-basteleien.de/dreieckszahlen.htm

bei mir gibts übrigens bei knapp unter 10.000 einen StackOverflow,
Summe bis dahin ~50.000.000,
bisschen weniger als MAX_INT 2.147.483.647 wenn man es genau nimmt


----------



## Wildcard (20. Nov 2006)

Hängt ja vom verwendeten Stack ab.
Wie willst du das aber zur Laufzeit feststellen.


----------



## SlaterB (20. Nov 2006)

wie feststellen?
na an der roten Schrift der Exception 

ist nix allgemeingültiges von mir, 
aber eine Aussage wie 'Integer.MAX_VALUE wird bei dieser Funktion aber wesentlich früher erreicht' schrie ja nach einem Gegenbeispiel


----------



## Wildcard (20. Nov 2006)

Stimmt. Hätte dazu sagen müssen 'als der maximal reservierbare Stack'. 
Es ging ja um soweit ich das verstanden habe darum eine Prüfung einzuführen das man keine Zahlen eingeben darf die zu StackOverflow führen können...


----------

