Was passiert denn da?
k geht von 0 bis 9 -> Das hört sich doch direkt nach einer for Schleife an.
Summe - Du hast also eine Variable, in der die Summe gespeichert ist und da kommt dann immer etwas hinzu. Da kann man z.B. das += von Java nutzen.
Die Berechnung selbst sollte dann doch kein Problem sein, oder doch?
Unabhängig davon ist besonders bei Brüchen und double Vorsicht angesagt. Das Ergebnis kann aufgrund der Fließkommaarithmetik und der begrenzten "Auflösung" des Datentyps stark vom mathematisch korrekten Ergebnis abweichen.
@White_Fox soweit ich mich an den gestrigen und heutigen Tag entsinne, warst Du derjenige, der mich zu abstrusen Dingen, wie einen Annotation Processor, genötigt hat
Für Funktionen bieten sich funktionale Elemente irgendwie an So lange man es nicht übertreibt, finde ich den Code auch einfacher zu lesen.
Mal zum Vergleich:
Java:
double summe =0.0;for(int i =0; i <9; i++){
summe +=Math.sqrt(i);}
ist jetzt nicht wirklich leichter zu verstehen/lesen/schreiben, man ist nur eher daran gewöhnt.
Ja, eklig wird es mit Streams/funktional, wenn man Tupel braucht, weil man sowohl mappen muss als auch die Ursprungsinformationen weiterreichen muss. Als Stream-Lösung für das Gesamtproblem ist das hier das einfachste, worauf ich komme:
Java:
importstaticjava.lang.Math.max;importstaticjava.util.stream.Stream.iterate;publicclassSumme{privatestaticlong[]pair(long sequence,long factorial){returnnewlong[]{ sequence, factorial };}privatestaticlong[]nextNumberAndFactorial(long[] v){long next = v[0]+1L;returnpair(next,max(1, v[1]* next));}privatestaticlongfactorial(long[] v){return v[1];}publicstaticvoidmain(String[] args){double sum =iterate(pair(0,1),Summe::nextNumberAndFactorial).mapToDouble(v ->1.0/factorial(v)).limit(10).sum();System.out.println(sum);}}
@White_Fox soweit ich mich an den gestrigen und heutigen Tag entsinne, warst Du derjenige, der mich zu abstrusen Dingen, wie einen Annotation Processor, genötigt hat
Bei einer solchen Frage würde ich auf Anfänger tippen.
Denke Streams und Funktionale Programmierung kommt dort viel später
Kann mich auch irren wenn ja dann SRY schon mal vorne weg.
Also @kneitzel hat das ganze doch super Erklärt
Ich würde erstmal den Ansatz Teile und Herrsche hier anwenden.
Du schreibst eine Methode die dir die Fakultät berechnet und dann schreibst du in eine Zählerschleife deine berechnung der Summe.
Das ganze könnte dann ca. so aussehen:
Berechnung der Fakultät Rekursiv:
Java:
publicstaticdoublefakt(int n){if(n<1)return1;...// hier schreibst du den Rekusiven return aufruf hin!}
und die Main:
Java:
publicstaticvoidmain(String[] args){GleitkommaZahl erg erstellen
Zählerschleife von 0 bis 9 laufen lassen
Rechnung: erg +=1/fakt(k);Ausgabe z.B. von erg!}
Wenn du gar nicht zurecht kommst melde dich einfach wieder
@zide_07 wenn du dein Code hier im Forum in Code Blöcke packst sieht es übersichtlicher aus.
Wie das geht entweder oben im Menü über Einfügen -> Code
Java:
publicclass summenzeichen {publicstaticvoidmain(String[] args){double sum =0.0;double p=1;for(int k =1; k <9; k++){
sum+=1/p;
p*=k;}System.out.print(sum);}}
@zide_07 wenn du dein Code hier im Forum in Code Blöcke packst sieht es übersichtlicher aus.
Wie das geht entweder oben im Menü über Einfügen -> Code
Java:
publicclass summenzeichen {publicstaticvoidmain(String[] args){double sum =0.0;double p=1;for(int k =1; k <9; k++){
sum+=1/p;
p*=k;}System.out.print(sum);}}
Velen dank!! Habs jetzt so gelöst und es funktioniert
Java:
publicclass summenzeichen {publicstaticvoidmain(String[] args){double sum =0.0;double p=1;for(int k =1; k <9; k++){
sum+=1/p;
p*=k;}System.out.print(sum);}}