Java nur bestimmte Werte eingeben mithilfe von Scanner (double, Münzeinwurf?

3 Antworten

Hier mal ein Beispiel. Die Methode "getCoinCents()" fragt so lange nach, bis der Benutzer einen gültigen Wert eingibt.

import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;

public class FilteredInput {
	private static Scanner scanner = new Scanner(System.in);
	
	// Testroutine. Zeigt nach jeder Eingabe den Kontostand an, bis du das Programm beendest.
	public static void main(String[] args) {
		int kontoCents = 0;
		
		while (true) {
			kontoCents += getCoinCents();
			System.out.printf("Ihr aktueller Kontostand beträgt %.2f €.%n", kontoCents/100.0);
		}
	}
	
	private static int getCoinCents() {
		int cents = -1;
		
		System.out.println("Bitte Münze einwerfen.");
		while (cents < 0) {
			// Prüfen, ob überhaupt eine Zahl eingegeben wurde
			try {
				cents = (int) (scanner.nextDouble()*100.0);
				
				// Prüfen, ob die Zahl eine gültige Münze ist (wird in Cent gespeichert, um Rundungsfehler zu vermeiden)
				if (!Arrays.asList(0,1,2,5,10,20,50,100,200).contains(cents)) {
					System.out.println("Bitte einen der folgenden Werte eingeben: 0,00 0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00");
					cents = -1;
				}
			} catch (InputMismatchException e) {
				System.out.println("Bitte einen der folgenden Werte eingeben: 0,00 0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00");
			}
		}
		return cents;
	}
}

Du könntest für die unterschiedlichen Münztypen eine Enumeration anbieten. Hier könntest Du auch direkt die Wertigkeiten hinterlegen und in der UI eben die Auswahl der Enumerationsmember gestatten.

Machn buffered Reader und mittels Switch ob die Eingabe zulässig war.

Woher ich das weiß:Studium / Ausbildung – info studium