Taschenrechner programmieren?


22.06.2023, 20:33

Also man könnte ja ein Array erstellen, wo alle Zahlen zwischen 0 und 9, inklusive Kommazahlen, definiert werden, aber keine Ahnung wie das geht.

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du kannst um das .nextDouble einfach ein try-catch bauen, das den Fehler abfängt, der bei falscher Eingabe geworfen wird. Und dann im Fehlerfall, also innerhalb des catch-Blocks, deinen gewünschten Text ausgeben.

try {
  zahl1 = benutzereingabe.nextDouble();
} catch(InputMismatchException e) {
  System.out.println("Bitte geben sie nur Zahlen ein!");
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
DrSoftware 
Fragesteller
 22.06.2023, 20:37

Danke dir. Kannte ich noch gar nicht sowas.

1
DrSoftware 
Fragesteller
 22.06.2023, 20:45

Jetzt bekomme ich den Fehler, dass zahl1 nicht initialisiert wurde. Komisch.

0
MrAmazing2  22.06.2023, 20:46
@DrSoftware

Weil du in dem Fall zahl1 nie setzt.

Der Code, um zahl1 zu setzen, konnte ja nicht ausgeführt werden. Weil er einen Fehler geworfen hat.

Du sagst dem Nutzer dann zwar, dass die Eingabe falsch war, aber dein Programm läuft trotzdem einfach weiter.

Hier kannst du
A) Dein Programm abbrechen

oder (finde ich nutzerfreundlicher)

B) Den Nutzer nochmal um eine Eingabe bitten

Was möchtest du machen? Kann dir gerne dabei helfen.

1
MrAmazing2  22.06.2023, 20:51
@DrSoftware

Ok, dann brauchst du im nächsten Schritt noch eine Schleife um dein try-catch. (Am besten erstmal informieren, was Schleifen sind, wenn dir das nichts sagt)

Vor dieser Schleife erstellst du eine boolean Variable, welche als Wiederholungs-Bedingung für die Schleife dient. (Solange diese Variable auf true ist, wiederholt sich der Code in der Schleife).

Bei gültiger Eingabe änderst du die Variable auf false, wodurch die Schleife kein weiteres mal ausgeführt wird.

Wohingegen sie bei einer ungültigen Eingabe nochmal ausgeführt wird, da die Variable (=Wiederholungsbedingung) weiterhin true ist.

boolean repeat = true;

while (repeat) {
  try {
    // Lass den Nutzer eine Zahl eingeben

    repeat = false; // Diese Zeile hier wird nur erreicht, falls das einlesen der Zahl keinen Fehler geworfen hat! -> Gültige Zahl -> Schleife abbrechen
  } catch(InputMismatchException exception) {
    // Sag dem Nutzer, dass die Eingabe falsch war
  }
}
1
DrSoftware 
Fragesteller
 22.06.2023, 20:54
@MrAmazing2

Ich hatte es gerade mit ChatGPT so gelöst:

System.out.println("Geben sie die erste Zahl ein:");
while (true) {
    try {
        zahl1 = benutzereingabe.nextDouble();
        break;
    } catch (InputMismatchException e) {
        System.out.println("Bitte geben sie eine Zahl ein!");
        benutzereingabe.next();
    }
} 
0
MrAmazing2  22.06.2023, 20:55
@DrSoftware

Stimmt, mit break; geht's auch. Ist noch schöner, als eine extra Variable zu machen.

2
DrSoftware 
Fragesteller
 22.06.2023, 20:56
@MrAmazing2

Genau. Der hat das etwas simpler gelöst. Aber ich danke dir trotzdem vielmals.

1

Der Scanner-Typ hat eine Methode, mit der man prüfen kann, ob sich eine Zahl im Eingabestream befindet. So lange das nicht der Fall ist, kannst du eine Schleife laufen lassen, die auf neue Eingaben wartet.

Beispiel:

Scanner reader = new Scanner(System.in);
double value;

while (!reader.hasNextDouble()) {
  System.out.println("Wrong input!");
  reader.next();
}

value = reader.nextDouble();