Java :: Aufgabe #216
5 Lösungen

Übung zu For-Schleifen
Anfänger - Java
von Blasius18
- 27.09.2018 um 18:41 Uhr
Die Fakultät einer Ganzzahl in den Grenzen von 0<=n<=60
als Konsolenanwendung umsetzen.
Der Anwender wird aufgefordet, eine Zahl in den Grenzen von 0 bis 60 einzugeben.
Das Programm errechnet den Wert und gibt ihn wieder aus.
Um die Entwicklung besser verfolgen zu können wird in jedem Schleifendurchgang der Aktuelle wert der Fakultät beim ,i-ten` schleifendurchgang ausgegeben.
Zusatzfeature (kann..)
gibt der Nutzer eine Zahl > 60 ein, gibt's einen Hinweis und er wird erneurt zur Eingabe einer Zahl 1 < zahl < 60 aufgefordert.
hat er 3 mal eine falsche Zahl eingegeben, bricht das Programm ab.
als Konsolenanwendung umsetzen.
Der Anwender wird aufgefordet, eine Zahl in den Grenzen von 0 bis 60 einzugeben.
Das Programm errechnet den Wert und gibt ihn wieder aus.
Um die Entwicklung besser verfolgen zu können wird in jedem Schleifendurchgang der Aktuelle wert der Fakultät beim ,i-ten` schleifendurchgang ausgegeben.
Zusatzfeature (kann..)
gibt der Nutzer eine Zahl > 60 ein, gibt's einen Hinweis und er wird erneurt zur Eingabe einer Zahl 1 < zahl < 60 aufgefordert.
hat er 3 mal eine falsche Zahl eingegeben, bricht das Programm ab.
Lösungen:

public class Fakultaet { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(ganzZahl(60)); } public static double ganzZahl(int zahl) { double ergebnis = 1; if (zahl > 0 || zahl > 60) { for (int i = 2; i <= zahl; i++) { ergebnis =ergebnis * i; System.out.println(ergebnis); } } return ergebnis; } }

// Hier ist die geforderte Lösung mit Eingabe zwischen 0< und<= 60. import java.util.Scanner; public class Fakultaet { public static void main(String[] args) { // TODO Auto-generated method stub Scanner eingabeWert = new Scanner(System.in); System.out.println("Bitte geben Sie eine Zahl zwischen 0 und 60 ein: "); int zahl = eingabeWert.nextInt(); double ergebnis = 1; if (zahl > 0 || zahl > 60) { for (int i = 2; i <= zahl; i++) { ergebnis = ergebnis * i; System.out.println(ergebnis); } } } }

// Mit Zusatzfeature 3x Wiederholung import java.util.Scanner; public class Fakultaet { public static void main(String[] args) { // TODO Auto-generated method stub Scanner eingabeWert = new Scanner(System.in); System.out.println("Bitte geben Sie eine Zahl zwischen 0 und 60 ein: "); int zahl = eingabeWert.nextInt(); if (zahl <= 60 || zahl < 0) { double ergebnis = 1; for (int i = 2; i <= zahl; i++) { ergebnis = ergebnis * i; System.out.println(ergebnis); } { } } if (zahl > 60) { System.out.println("1. Hinweis: Bitte geben Sie eine neue Zahl ein: "); int zahl1 = eingabeWert.nextInt(); if (zahl1 <= 60 || zahl1 < 0) { double ergebnis = 1; for (int i = 2; i <= zahl1; i++) { ergebnis = ergebnis * i; System.out.println(ergebnis); } { } } } if (zahl > 60) { System.out.println("2. Hinweis: Bitte geben Sie eine neue Zahl ein: "); int zahl2 = eingabeWert.nextInt(); if (zahl2 <= 60 || zahl2 < 0) { double ergebnis = 1; for (int i = 2; i <= zahl2; i++) { ergebnis = ergebnis * i; System.out.println(ergebnis); } } } if (zahl > 60) { System.out.println("3. Hinweis und letzter Hinweis: Bitte geben Sie eine neue Zahl ein: "); int zahl3 = eingabeWert.nextInt(); if (zahl3 <= 60 || zahl3 < 0) { double ergebnis = 1; for (int i = 2; i <= zahl3; i++) { ergebnis = ergebnis * i; System.out.println(ergebnis); } } } if (zahl > 60) { System.out.println(" Das war der letze Versuch"); } } }
Anmerkung: Sorry wenn meine Erklärungen nicht perfekt verständlich sind, bin da noch nicht so perfekt die Sachen zu erklären
Die Main-Klasse:
Java-Code
Die Methoden, welche ich aus meinem eigenem Methoden package benutzt habe:
Java-Code
Die Main-Klasse:

//Importieren von Math-Klassen import java.math.BigInteger; //Importieren von Text-Klassen import java.text.DecimalFormat; //Importieren meines eigenenen Methoden package import Methodensammlung.Methoden; /** * Es können Fakultäten zwischen inklusive 0 und 60 berechnet werden * * @author (nOrdan) * @version (06.06.2019) */ public class Rechner { private BigInteger ergebnis = new BigInteger("1"); //Erstellen eines Objekts von BigInteger um große Ergebnisse wie 60! speichern zu können Methoden m = new Methoden(); //Erstellen eines Objekts der Methodenklasse aus meinem package um die Methoden der Klasse nutzen zu können DecimalFormat df = new DecimalFormat(); //Erstellen eines Objekts von DecimalFormat ,um Zahlen nachher mit Tausendertrennzeichen zur besseren Lesbarkeit zu trennen public static void main(String [] args) { Rechner r = new Rechner(); //Erstellen eines Objektes der Klasse Rechner, um non-static-Methoden nutzen zu können r.inputs(); //Starten der Methode für die inputs bzw. kurgesagt der Programmstart } private void inputs() { boolean valid1 = false; //Boolean Variable für die While-Schleife int n = 0; //Lokale Variable für die Eingabe des Users int counter = 0; //Lokale Variable, um die falschen Eingaben des Users zu zählen while (valid1 == false) //While-Schleife läuft so lange wie valid1 = false ist { String input1 = m.userInput("Geben sie eine Zahl zwischen inklusive 0 und 60 ein"); //Speichern des User-Inputs in eine lokale Variable m.errorIntInput(input1); //Prüfen ob die Variable gleich null ist (Abbrechen wurde gedrückt, dass Programm wird beendet) oder ob die Länge des Strings gleich 0 ist, um fehlerhaften //Eingaben vorzubeugen try //Versucht den Code umzusetzen und geht zu catch wenn er nicht geht { n = m.parseInt(input1); //Versuch den Input des Users in einen Int Wert zu verwandeln, schlägt dies Fehl geht es zu catch, wir bekommen eine Errornachricht und die Eingabe beginnt erneut if (n < 0 || n > 60) //Wir wollen nicht,dass n kleiner 0 oder größer 60 ist, deshalb Prüfen ob es so ist { if (counter == 0) //Beim ersten Mal n kleiner 0 oder größer 60 diese Fehlermeldung { m.errorMessage("Nur Zahlen zwischen inklusive 0 und 60 eingeben! Noch 2 Versuche bis Programmabbruch","Size exceeded"); //Fehlermeldung für erste falsche Eingabe counter++; //Counter für die Anzahl der falschen Eingaben wird erhöht continue; //Schleife beginnt von vorne } else if (counter == 1) //Beim zweiten Mal n kleiner 0 oder größer 60 diese Fehlermeldung { m.errorMessage("Nur Zahlen zwischen inklusive 0 und 60 eingeben! Noch 1 Versuch bis Programmabbruch","Size exceeded"); //Fehlermeldung für zweite falsche Eingabe counter++; //Counter für die Anzahl der falschen Eingaben wird wieder erhöht continue; //Schleife beginnt von vorne } else if (counter == 2) //Beim dritten Mal n kleiner 0 und größer 60 diese Fehlermeldung und das Programm wird beendet { m.errorMessage("Zu häufige falsche Eingabe, das Programm wird beendet","Size exceeded"); //Fehlermeldung für dritte falsche Eingabe System.exit(0); //beenden des Programms } } else //Ist n nicht kleiner 0 und nicht größer 60 wird die Schleife mit dem verändern der Schleifenvariable zu true beendet { valid1 = true; } } catch(Exception e) //Wenn bei try etwas nicht klappt kommt dieser Fehler { m.errorMessage("Invalid user input","Invalid input"); //Fehlermeldung } } berechnung(n); //Methode zur Berechnung der Fakultät mit Übergabe des Inputs des Users als Parameter } private void berechnung(int n) //Methode zur Berechnung der Fakultät { m.konsoleLeeren(); //Konsole wird komplett geleert for (int i = 1; i <= n; i++) { BigInteger a = BigInteger.valueOf(i); //i wird zum BigInteger gemacht, damit mit i gerechnet werden kann, da die Variable ergebnis auch BigInteger ist ergebnis = ergebnis.multiply(a); //Ergebnis wird mit der lokalen Variable a multipliziert System.out.println("Nach dem " + i + ". Durchgang: " + df.format(ergebnis)); //Ausgabe des Ergebnisses der Multiplikation als formartierte Zahl getrennt durch Tausenderzeichen in der Konsole } m.informationMessage("Die Fakultät von " + n + " beträgt " + df.format(ergebnis),"Ergebnis"); //Ausgabe des Endergebnisses in einem JOptionPane; } }
Die Methoden, welche ich aus meinem eigenem Methoden package benutzt habe:

public String userInput(String message) { return JOptionPane.showInputDialog(message); //Es wird der Input des Users zurückgegeben, die Aufforderung des Programmieres an den User wird per Parameter eingegeben } public void errorIntInput(String input) { if (input == null) //Wenn Abbrechen beim JOptionPane im User-Input gedrückt wird, wird null zurückgegeben { System.exit(0); } else if (input.isEmpty() == true) //Prüfen ob der String leer ist { //continue; wenn nötig } } public void errorMessage(String message,String errorName) { JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); //JOptionPane mit Errordesign } public void informationMessage(String message,String informationName) { JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE); //JOptionPane mit Informationdesign } public int parseInt(String input) { return Integer.parseInt(input); //Der Parameter wird zu einem Int geparst und dann zurückgegeben }

import java.util.Scanner; public class Main { public static void main(String[] args) { int zahl = eingabeZahl(); long fakultaet = 1; int eingabeVersuche = 0; while (zahl > 60) { if (zahl > 60 && eingabeVersuche != 2) { eingabeVersuche++; System.out.println("Eingegeben Zahl (" + zahl + ") ist über 60"); zahl = eingabeZahl(); } else if (eingabeVersuche == 2) { System.out.println("Zuviele falsche Eingaben, Program wird abgebrochen."); System.exit(0); } } for (long i = 1; i <= zahl; i++) { fakultaet = fakultaet * i; System.out.println(fakultaet); } } public static int eingabeZahl() { Scanner scan = new Scanner(System.in); System.out.println("Bitte eine Ganzzahl zwischen 0 und 60 eingeben: "); int zahl = scan.nextInt(); return zahl; } }