# Fakultät iterativ, Quellcode Probleme



## public_class (7. Sep 2009)

HEy Leute ich bin hier neu im Forum und frage mich, ob ihr mir mit meinem interativen programm helfen könnt, es soll Fakultäten berechen, aber anscheinend stimmt etwas mit meinem int oder long nicht, aber ich komm einfach nicht drauf.. sitz jetzt schon was länger dran, also wenn mir jemand die augen öffnen kann BITTE

```
import javax.swing.JOptionPane; 

public class Fakultät { 
public long n; 


public Fakultät () 
{ 
String input = JOptionPane.showInputDialog("Bitte geben Sie die Zahl ein)"); 
n = Integer.parseInt(input); 
ausgabe(n); 
} 

public void ausgabe(long n) 
{ 
System.out.println("Die Fakultät von "+n+" = "+fakul(n)); 
} 


public static void main(String[] args) 
{ 
Fakultät faku = new Fakultät(); 

} 

public long faku(long i) 
{ 
if (i==0) 
{ 
return 1; 

} 

else 
{ 
//ausgabe (n) 
return i 
*faku(i-1); 
} 
} 

public long faulit (long n) 
{ 
long ergebnis = 1; 
for (;n>0;n--) 
{ 
ergebnis = ergebnis * n; 
} 

ausgabe (ergebnis); 
return ergebnis; 


} 
}
```
ich hoffe auf meinen ersten post hier bekomme ich ne antwort, danke schon mal im vorraus...;(


----------



## diggaa1984 (8. Sep 2009)

hi, willkommen im forum 

1. Sache

```
public void ausgabe(long n) { 
    System.out.println("Die Fakultät von "+n+" = "+fakul(n));  //was, bzw. wo ist fakul !?
}
```
fakul wurde nich im Code definiert :bahnhof:

2. Sache (angenommen obige methode würde eine der 2 definierten berechnungen aufrufen)

```
public long faulit (long n) { 
    long ergebnis = 1; 
    for (;n>0;n--) { 
        ergebnis = ergebnis * n; 
    } 
 
    ausgabe (ergebnis); //ausgabe ruft doch wieder eine berechnung auf !?
    return ergebnis; 
}
```
deine Ausgabe ruft selbst die Berechnung einer Fakultät auf, das was du hier hast läuft dann sozusagen öfter als nötig ab.

Lösung: 
	
	
	
	





```
ausgabe(faulit(n))
```
 und in der Ausgabe selbst *KEIN* Aufruf einer Berechnung mehr, macht auch kein Sinn, denn die Methode heisst ja nur "ausgabe" 

3.? Was funktioniert eigentlich nicht, hast du Exceptions, ist die Ausgabe fehlerhaft, wenn ja was siehst du etc.


----------



## public_class (8. Sep 2009)

tja, der debugger sagt wie schon gesagt immer, dass etwas mit meinem int / long nicht stimmt, also dachte ich vllt hatte ich die irgendwie durcheinander gebracht


----------



## ARadauer (8. Sep 2009)

ein int sollte normal implizit auf ein long gecastet werden... was sagt den der debugger?


----------



## ARadauer (8. Sep 2009)

```
import javax.swing.JOptionPane; 

public class Fakultät { 
   public long n; 


   public Fakultät () 
   { 
      String input = JOptionPane.showInputDialog("Bitte geben Sie die Zahl ein)"); 
      n = Integer.parseInt(input); 
      ausgabe(n); 
   } 

   public void ausgabe(long n) 
   { 
      System.out.println("Die Fakultät von "+n+" = "+faulit(n)); 
   } 


   public static void main(String[] args) 
   { 
      Fakultät faku = new Fakultät(); 

   } 

   public long faku(long i) 
   { 
      if (i==0) 
      { 
         return 1; 

      } 

      else 
      { 
         //ausgabe (n) 
         return i 
         *faku(i-1); 
      } 
   } 

   public long faulit (long n) 
   { 
      long ergebnis = 1; 
      for (;n>0;n--) 
      { 
         ergebnis = ergebnis * n; 
      } 

      //ausgabe (ergebnis); 
      return ergebnis; 


   } 
}
```
stimmt eh soweit...

Bitte poste nächste mal saubere Beispiele, die Methode fakul gibt es gar nicht, und wenn man statt der faku oder faulit aufruft, bekommt man einen stack overflow, da du darin nochmal eine ausgabe machst und die methode wieder und wieder aufrufst...


----------



## public_class (8. Sep 2009)

hey digaa, danke ich habs gerade versucht und zmindest die offensichtlichen fehler sind behoben, muss jetzt mal ausprobieren ob das programm jetzt noch sinn ergibt!! trotzdem danke, ich meld mich falls es immer noch nicht läuft ;-)


----------

