Java :: Aufgabe #216 :: Lösung #4
5 Lösungen
#216
Ü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.
#4
von nOrdan (1160 Punkte)
- 06.06.2019 um 18:03 Uhr
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:
Die Methoden, welche ich aus meinem eigenem Methoden package benutzt habe:
Die Main-Klasse:
Java-Code
//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:
Java-Code
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 }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1