# Euler'sche Zahl berechnen, Problem bei for-schleife



## Chrissicat (30. Dez 2010)

hallo
ich bin zwar meines erachtens schon weit, aber komm nicht mehr weiter 
mein problem ist hier (zumindest glaub ich das) die forschleife.. 
mein programm soll die eulersche zahl berechnen, der benutzer darf - wenn er will - eingeben wie viele der reihenglieder zusammengezählt werden sollen.. 
die fakultätmethode ist richtig oder?
habs nämlich mal ausprobiert.. das funktioniert..


```
package eulerschezahl;

import Prog1Tools.IOTools;

public class Main {

    public static void main(String[] args) {
        char x = 'j';
        float summe = 0;
        do {
            x = Prog1Tools.IOTools.readChar("Geben Sie 'j' ein, wenn Sie selbst bestimmen wollen, bis zu welchem Reihenglied gerechnet werden soll, andernfalls geben Sie 'n' ein: ");
        } while (x != 'j' && x != 'n');
        if (x == 'j') {
            int n;

            n = Prog1Tools.IOTools.readInt("Geben Sie ein, bis zu welchem Reihenglied Sie das Programm die Euler'sche Zahl berechnen lassen wollen: ");
            if (n == 1) {
                System.out.println("die summe ist 2");
            }
            if (n == 0) {
                System.out.println("die summe ist 1");
            }
            if (n != 1 && n != 0) {
                for (int i = 0; i < n; i++) {
                    summe += 1 / fakt(i);
                    }
              //  float endsumme = summe+2;
            } System.out.println("die Summe der ersten " + n + " Reihenglieder ist " + summe);

        }
        if (x == 'n') {
            summe = 2;
            int a;
            do {
                for (a = 2; a > 0; a++) {
                    summe = 1 / fakt(a) + summe;
                }
            } while ((1 / fakt(a)) < 0.00000001);
            System.out.println("die summe ist " + summe);
        }
    }

    public static int fakt(int x) {
        if (x != 1 && x != 0) {
            int zaehler = x - 1;
            while (zaehler > 0) {
                x = x * zaehler;
                zaehler--;
            }
        }
        if (x == 1 || x == 0) {
            x = 1;
        }

        return x;
    }
}
```

mh.. ich bin im moment noch bei 'J'. meine lösung ist immer 2... bitte helft mir.
liebe grüße
Chrissi


----------



## nrg (30. Dez 2010)

Chrissicat hat gesagt.:


> die fakultätmethode ist richtig oder?



ohne jetzt überhaupt groß den code weiter anzuschauen wird eine fakultätmethode als int nicht sehr weit funktionieren..


----------



## Landei (30. Dez 2010)

Ich hab den Code nur überflogen, aber ich schätze mal, du tappst in die Divisions-Falle (Zeile 25):

```
//die Division von ints gibt immer ints, selbst wenn das Ergebnis ein double ist:
double x = 15 / 10; //ergibt 1.0

//Lösungsmöglichkeiten
double x = 15.0 / 10; //ergibt 1.5
double x = 15 / 10.0; //ergibt 1.5
double x = 1.0 * 15 / 10; //ergibt 1.5
double x = (double)15 / 10; //ergibt 1.5
...
```

Ach ja, nrg hat auch recht, mit einer int-Fakultät kommst du nicht sehr weit...


----------



## Chrissicat (30. Dez 2010)

:applaus: danke leute!!
hab den int auf nen double geändert und den float auch gleich. so ein dummer fehler 
ich freu mich grad so. jetzt funktionierts


----------



## nrg (30. Dez 2010)

so wars eigentlich nicht gemeint aber wenns hilft


----------

