Fakultät, warum Endlosschleife?

Wang

Bekanntes Mitglied
Hallo! :)

Ich habe folgendes Beispiel aus der Vorlesung vergebens versucht zum Laufen zu bringen:

Java:
public static int fakultaet02 (int n)
{
    int erg = 1;
    while (n > 0)
    {
        erg = erg * n;
        n--;
    }
    return erg;
}


So sieht das bei mir aus:

Java:
public class Fakultaet
{
   public static int fakultaet02 (int n)
   {
      int erg = 1;
      while (n > 0);
      {
         erg = erg * n;
         n--;
      }
      return erg;
    }

   public static void main (String[] args)
   {
      Fakultaet fak = new Fakultaet();
      int n = 10;
      System.out.println ("Ergebnis: " + fak.fakultaet02(n));
   }
}

Das Problem:
Das Programm verfängt sich anscheinend in einer Endlosschleife und ich finde den Grund nicht.
Kann mir bitte jemand sagen, woran das liegt?

Vielen Dank.
 

tfa

Top Contributor
Lass das ; hinter dem while weg.
Das ; ist sozusagen ein leerer Block, und der wird durch die while-Schleife unendlich oft wiederholt. Das n verändert sich nicht, da der Programmfluss nie über Zeile 6 hinauskommt. Das Abbruchkriterium wird nie erfüllt -> Endlosschleife.
 

Wang

Bekanntes Mitglied
Vielen Dank soweit.

Als kleine Übung für mich persönlich, um das Programmieren mit Java besser zu lernen, möchte ich das Programm so erweitern, dass ich es über die Kommandozeile starte und dann die Fakultät einer beliebigen Zahl ausrechnen lasse, die ich in die Kommandozeile eingebe.

Bisher haben wir nämlich immer die zu berechnenden Zahlen im Quellcode festgelegt.

Wie wäre der obige Gedanke umzusetzen?

Vielen Dank für Euren starken Support soweit! :toll:

Gruß
Wang
 

javimka

Top Contributor
Klar geht das. Am einfachsten ist es, wenn du die zu berechnende Zahl dem Programm gleich als Parameter übergibst. Der Befehl würde dann lauten: [c]java MyFakultaet 12[/c] um 12! zu berechnen.
Im Programm kannst hast du das übergebene Argument dann im String Array args[], das du ja im Methodenkopf der Main definierst. Einen String kannst du mit Integer.parseInt in einen int verwandeln.

Wenn du die Zahlen im Nachinein eingeben willst, musst du mit System.in arbeiten. Gibt dazu viele Tutorials, einfach mal googeln.
 

Wang

Bekanntes Mitglied
Danke.
Ich will die Zahlen im Nachhinein eingeben. Aus den Tutorials werde ich nicht wirklich schlau...
Aber ich habe soviel erfahren, dass ich das Package java.io benötige.

Nur:
Wir haben noch nie mit Packages und ihren Klassen gearbeitet, deshalb habe ich keinen blassen Schimmer, wie ich vorgehen soll. ???:L

Ich bin für jeden Tipp sehr dankbar. ;)
 

javimka

Top Contributor
Strings einlesen kannst du so:
Java:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
	System.out.print("Bitte eine Zahl eingeben: ");
	String input = in.readLine();
	int number = Integer.parseInt(input);
	
	System.out.println("Zahl: "+number);
} catch (Exception e) {
	e.printStackTrace();
}

Importieren musst du dazu:
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
 

R4xx4r

Mitglied
Hallo,

Du kannst es aber auch mit Hilfe vom Scanner einlesen. So hab ich dasgelernt auf der Uni. Ich denk das ist die etwsa leichtere Variante. Sry wenn das mit dem leichter ned stimmt bin noch ein Anfänger, aber ich kanns halt mit dem Scanner :)

Link zur API - Scanner
Scanner (Java Platform SE 6)

mfg,
R4xx4r
 

Wang

Bekanntes Mitglied
Danke für Eure Hilfe.
Ich muss ehrlich sagen, dass mir das im Moment noch alles zu hoch ist und ich nicht weiß, wie ich das mit meinem Fakultäts-Programm sinnvoll verknüpfen kann. :oops:

Vielleicht ist es doch besser, wenn ich warte, bis wir das Thema Packages in der Vorlesung durchnehmen...
 

Wang

Bekanntes Mitglied
Die import-Anweisungen gehören nach ganz oben. Dann kannst du meinen Code an den Anfang deiner main-Methode stellen.

Vielen Dank, javimka.

Ich muss sagen, dass ich meinen Gedanken niemals hätte alleine umsetzen können. :-(

Deshalb die Frage, wie schaffe ich es, Klassen aus Packages sinnvoll zu nutzen?

Mir kommt das im Moment unendlich groß und unübersichtlich vor...

EDIT:
Leider wird nur die Fakultät von 10 berechnet, egal welche Zahl ich eingebe. Woran liegt das?

Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Fakultaet
{
   public static int fakultaet02 (int n)
   {
      int erg = 1;
      while (n > 0)
      {
         erg = erg * n;
         n--;
      }
      return erg;
    }

   public static void main (String[] args)
   {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      try {
         System.out.print("Bitte eine Zahl eingeben: ");
         String input = in.readLine();
         int number = Integer.parseInt(input);
    
         System.out.println("Zahl: "+number);
      } catch (Exception e) {
         e.printStackTrace();
      }
      Fakultaet fak = new Fakultaet();
      int n = 10;
      System.out.println ("Ergebnis: " + fak.fakultaet02(n));
   }
}
 
Zuletzt bearbeitet:

javimka

Top Contributor
Das liegt an deiner Zeile 30:[c]int n = 10;[/c] :D

Schau mal, in meinem Code, wird ein int number verwendet. In dieser Variable number, ist die eingegebene Zahl gespeichert. Du willst natürlich die Fakultät von dieser Zahl wissen. Jetzt ist es aber so, dass number nur innerhalb der try-catch Anweisung sichtbar ist. Deswegen ist es am einfachsten, wenn du deinen Code (Zeile 29 und 31) einfach auf die Zeile hinter [c]int number = ...;[/c] verschiebst.
Java:
   public static void main (String[] args)
   {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      try {
         System.out.print("Bitte eine Zahl eingeben: ");
         String input = in.readLine();
         int number = Integer.parseInt(input);

         Fakultaet fak = new Fakultaet();
         System.out.println ("Ergebnis: " + fak.fakultaet02(number));
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

Mach dir nicht zu viele Sorgen wegen den Packages. Es gibt nicht so viele, die du oft benötigst. java.io und java.util wirst du wahrscheinlich öfters verwenden. Wenn du mit GUIs arbeitest auch noch java.awt und javax.swing.
Tipp: Wenn du viele Klassen aus einem Packet, z.B. java.io brauchst, kannst du auch schreiben [c]import java.io.*;[/c] um alle Klassen in java.io zu importieren.
Achtung: Wenn du z.B. java.awt.* importierst, hast du nicht auch automatisch java.awt.event.* importiert. Die musst du dann doch noch separat angeben.
 

Wang

Bekanntes Mitglied
Vielen Dank, javimka, jetzt funktioniert natürlich alles. :toll:

Ist es eigentlich normal, dass ich, nachdem ich die Fakultät einer Zahl ausgerechnet habe, das Programm über den Befehl
Code:
java Fakultaet
erneut starten muss, um die Fakultät einer weiteren Zahl zu berechnen?

Gruß
Wang
 

javimka

Top Contributor
Irgendwann, wirst du das selber einprogrammieren können ;)
Java:
   public static void main (String[] args)
   {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      try {
         while(true) {
         System.out.print("Bitte eine Zahl eingeben: ");
         String input = in.readLine();
         int number = Integer.parseInt(input);
 
         Fakultaet fak = new Fakultaet();
         System.out.println ("Ergebnis: " + fak.fakultaet02(number));
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
 

Wang

Bekanntes Mitglied
Vielen Dank, javimka. ;)

Ich muss sagen, dass sich bei mir wirklich Enttäuschung breit macht.
Einfache Sachen wie "HelloWorld" bekomme ich hin, aber wenn es darum geht, einen beliebigen Gedanken umzusetzen, bin ich mit meinem Java schnell am Ende.

Ich werde mir auf jeden Fall die heutigen Beispiele verinnerlichen, in der Hoffnung, mein Java-Wissen erweitert zu haben.

Nochmals vielen Dank für Deinen starken Support! ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
K Fakultät Java Basics - Anfänger-Themen 5
B Java Array Fakultät Function Java Basics - Anfänger-Themen 5
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
I Datentypen Warum so nur Fakultät nur bis 8? Java Basics - Anfänger-Themen 5
K Fakultät Java Basics - Anfänger-Themen 16
C Erste Schritte Negative Zahlen als Fakultät ablehnen Java Basics - Anfänger-Themen 2
P Problem bei Fakultät mit "for"-Schleife Java Basics - Anfänger-Themen 12
M Fakultät berechnen Java Basics - Anfänger-Themen 2
A Fakultät probleme Java Basics - Anfänger-Themen 1
Z Schleifen Beispiel: Fakultät Java Basics - Anfänger-Themen 26
P Fakultät aus Zahl bilden Java Basics - Anfänger-Themen 5
K Fakultät zurückrechnen Java Basics - Anfänger-Themen 7
V Rekursion und Fakultät Java Basics - Anfänger-Themen 4
N Fakultät Java Basics - Anfänger-Themen 9
P Methoden Fakultät und Fehlerwert berechnen Java Basics - Anfänger-Themen 7
Fab1 Project Euler problem20 Fakultät von 100 Java Basics - Anfänger-Themen 13
S Erste Schritte Fakultät Quellcode Java Basics - Anfänger-Themen 12
L Fakultät Java Basics - Anfänger-Themen 2
G vielfache, fakultät und primzahltest Java Basics - Anfänger-Themen 35
M Fakultät Java Basics - Anfänger-Themen 13
J Fakultät- Programm programmieren Java Basics - Anfänger-Themen 10
W Fakultät Java Basics - Anfänger-Themen 9
J Fakultät und Rekursion Java Basics - Anfänger-Themen 9
V Überlauf Fakultät Java Basics - Anfänger-Themen 4
L Fakultät Programm ! Java Basics - Anfänger-Themen 7
M Problem mit Berechnung der Fakultät Java Basics - Anfänger-Themen 3
B Berechnugn der Fakultät Java Basics - Anfänger-Themen 3
M Fakultät berechnen Java Basics - Anfänger-Themen 2
R Fakultät einer Zahl errechnen. Java Basics - Anfänger-Themen 7
M Brauche Hilfe mit Fakultät! Java Basics - Anfänger-Themen 16
N java befehl für fakultät Java Basics - Anfänger-Themen 4
S Hilfe bei Endlosschleife Java Basics - Anfänger-Themen 2
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
noah1407 endlosschleife Java Basics - Anfänger-Themen 7
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
sserio Endlosschleife ja nein? Java Basics - Anfänger-Themen 13
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
S Endlosschleife - Warum? Java Basics - Anfänger-Themen 1
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Collatzfolge endlosschleife. Java Basics - Anfänger-Themen 4
D Array in Endlosschleife überschreibt vorherige Werte Java Basics - Anfänger-Themen 4
E Eulersche Zahl berechnen, Endlosschleife Java Basics - Anfänger-Themen 2
N Endlosschleife... Warum? Java Basics - Anfänger-Themen 12
P Kapselung Problem - Endlosschleife Java Basics - Anfänger-Themen 10
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
D Endlosschleife und ich komme nicht raus! Java Basics - Anfänger-Themen 8
N Erste Schritte Endlosschleife und Exception Java Basics - Anfänger-Themen 5
R Endlosschleife nach InputMismatchException Java Basics - Anfänger-Themen 2
S Endlosschleife? Java Basics - Anfänger-Themen 2
T Endlosschleife Java Basics - Anfänger-Themen 2
Z Endlosschleife Java Basics - Anfänger-Themen 6
T Endlosschleife Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
StupidAttack Endlosschleife, Sockets Java Basics - Anfänger-Themen 2
C ungewollte Abbrüche in einer Endlosschleife Java Basics - Anfänger-Themen 6
E komische endlosschleife Java Basics - Anfänger-Themen 6
7 Endlosschleife pausieren Java Basics - Anfänger-Themen 11
F .readLine() erzeugt endlosschleife Java Basics - Anfänger-Themen 4
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
R warum endlosschleife? Java Basics - Anfänger-Themen 7
S JTable Endlosschleife Java Basics - Anfänger-Themen 5
J Aus endlosschleife kommen Java Basics - Anfänger-Themen 5
R Endlosschleife verhindert das Schließen des Fensters Java Basics - Anfänger-Themen 10
Povlsen84 Endlosschleife Java Basics - Anfänger-Themen 5
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
Antoras Endlosschleife Java Basics - Anfänger-Themen 8
J Wartezustand in Endlosschleife - bessere Alternativen Java Basics - Anfänger-Themen 20
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
N Endlosschleife? Java Basics - Anfänger-Themen 3
V mehrere Threads starten + Endlosschleife Java Basics - Anfänger-Themen 3
I Hilfe wer findet mein Fehler in bei der Endlosschleife Java Basics - Anfänger-Themen 7
G Sound/Endlosschleife/Abbruchproblem Java Basics - Anfänger-Themen 3
G HappyNumbers - Endlosschleife Java Basics - Anfänger-Themen 11
0 Endlosschleife beim Integer Array mischen? Java Basics - Anfänger-Themen 3
M OutputStream funktioniert nur in Endlosschleife ? Java Basics - Anfänger-Themen 4
G Endlosschleife, aber warum? Java Basics - Anfänger-Themen 12
G Endlosschleife beenden Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben