Java :: Aufgabe #216

4 Lösungen Lösungen öffentlich

Ü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.

Lösungen:

vote_ok
von Steve (300 Punkte) - 26.01.2019 um 21:59 Uhr
Quellcode ausblenden Java-Code

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;

        }
}
vote_ok
von Steve (300 Punkte) - 26.01.2019 um 22:24 Uhr
Quellcode ausblenden Java-Code

// 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);
			}
		
		
		
		
	        }
	}
}
vote_ok
von Steve (300 Punkte) - 26.01.2019 um 23:46 Uhr
Quellcode ausblenden Java-Code

// 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");
		}

	}

}

vote_ok
von nOrdan (940 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:

Quellcode ausblenden 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:

Quellcode ausblenden 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
    }