Wiederverwendbare Konsoleneingabe

ZERG

Mitglied
Hallo Leute, ich habe eine wiederverwendbare Konsoleneingabe geschrieben und wollte fragen, ob jemand mit mehr Erfahrung kurz seine Meinung zu meinem Code schreiben könnte. Darf ich den Code so verwenden oder habe ich Fehler gemacht? Vielen Dank!

Java:
import java.util.InputMismatchException;
import java.util.Scanner;

public class MeineEingabe
{
	private static int eingabeInt;
	private static double eingabeDouble;

	public static void erfasseEingabe(String datentyp)
	{
		boolean eingabeOk = false;
		while (!eingabeOk)
		{
			System.out.print("\nEingabe:");
			Scanner eingabe = new Scanner(System.in);
			try
			{
				switch (datentyp)
				{
					case "int":
						eingabeInt = eingabe.nextInt();
						break;
					case "double":
						eingabeDouble = eingabe.nextDouble();
						break;
				}
				eingabeOk = true;
			}
			catch (InputMismatchException e)
			{
				System.out.print("\nEingabe war fehlerhaft.");
			}
		}
	}

	public static int liefereInt()
	{
		erfasseEingabe("int");
		return eingabeInt;
	}

	public static double liefereDouble()
	{
		erfasseEingabe("double");
		return eingabeDouble;
	}
}
 

rme

Top Contributor
Hallo,

ein paar Sachen fallen mir auf:

* für die Parameter lieber enum verwenden, das spart String-Vergleiche und lässt sich besser refaktorisieren

* der Benutzer weiß nicht, welchen Datentyp er eingeben soll - vielleicht für jeden Typ eine andere Meldung? "Bitte ganze Zahl eingeben", "Bitte Gleitkommazahl eingeben"
 

njans

Top Contributor
Generell finde ich es auch unschön, dass alles bei dir static ist. Zudem müsste man um eine Zahl einzulesen und diese dann wieder zu verwenden 2 Aufrufe machen, wobei es doch einer tut.
 

ZERG

Mitglied
Danke für eure Kritik. Habe den Code jetzt so umgeschrieben. Warum ist die Methode erfasseEingabe eigentlich überflüssig? Ich meine jetzt habe ich zwei Methoden mit ähnlichen Zeilen. Ist nicht der Sinn der Wiederverwendbarkeit, dass mann den Code auslagert und diesen nach Bedarft einbindet?

Main.java :
Java:
public class IrgendwasMain
{
	public static void main(String[] args)
	{
		MeineEingabe eingabe = new MeineEingabe();
		System.out.printf("\nInt: %d\n", eingabe.liefereInt());
		System.out.printf("\n\nDouble: %f\n", eingabe.liefereDouble());
	}
}

MeineEingabe.java:
Java:
import java.util.InputMismatchException;
import java.util.Scanner;

public class MeineEingabe
{
	public int liefereInt()
	{
		int eingabeInt = 0;
		boolean eingabeOk = false;
		System.out.print("\nBitte eine ganze Zahl eingeben.\nEingabe:");
		while (!eingabeOk)
		{
			Scanner eingabe = new Scanner(System.in);
			try
			{
				eingabeInt = eingabe.nextInt();
				eingabeOk = true;
			}
			catch (InputMismatchException e)
			{
				System.out.print("\nEingabe war fehlerhaft.");
			}
		}
		return eingabeInt;
	}

	public double liefereDouble()
	{
		double eingabeDouble = 0;
		boolean eingabeOk = false;
		System.out.print("\nBitte eine Gleitkommazahl eingeben.\nEingabe:");
		while (!eingabeOk)
		{
			Scanner eingabe = new Scanner(System.in);
			try
			{
				eingabeDouble = eingabe.nextDouble();
				eingabeOk = true;
			}
			catch (InputMismatchException e)
			{
				System.out.print("\nEingabe war fehlerhaft.");
			}
		}
		return eingabeDouble;
	}
}
 

Lars789852

Aktives Mitglied
die boolean Variable
Code:
eingabeOk
kannst du weglassen, stattdessen verwendest du als Schleifenbedingung [c]true[/c] und fügst an der Stelle, wo die boolean Variable auf
Code:
true
gesetzt wird, ein
Code:
return eingabeInt
ein, es sorgt dafür, dass die Methode beendet wird und der Wert zurückgegeben wird.

Die Klassennamen könnten auch anders gewählt werden. In der Regel werden Klassen so genannt, dass man auf den ersten Blick sieht, was die Klasse kann oder repräsentiert.
 

Neue Themen


Oben