Wiederholung einer fehlerhaften Eingabe

Status
Nicht offen für weitere Antworten.

pavelle

Mitglied
Hallo zusammen,
könnt ihr mir sagen, wie ich eine fehlerhafte Eingabe (z.B Zeichenkette eingegeben anstatt einer Zahl) wiederholen lasse? Es ist mir egal ob einfach nur die Eingabe wiederholt wird oder die dazugehörige Abfrage von vorne gestartet wird.

Weiterhin wollte ich wissen, ob man bei einer Gleikomma Eingabe dem Programm beibringen kann auch mit Komma (,) umzugehen?

vielen Dank!


Java:
import java.io.*;
import java.text.DecimalFormat;

public class übungsaufgabe_5_try_catch {



    public static void main(String[] args) throws IOException {


        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader bReader = new BufferedReader(isr);

        String eingabe_radius="";
        String eingabe_hubhoehe="";
        String eingabe_anzahl="";

        double radius=0;
        double hubhoehe=0;
        double anzahl=0;
        

        //****************************************************************************

        System.out.println("Bitte geben Sie den Radius an (in mm): ");
        
        eingabe_radius = bReader.readLine();
        

        try
        {
        radius = Double.valueOf(eingabe_radius);
        }
        catch (Exception e)
        {
            System.out.println("Falsche Eingabe. Nur Zahlen eingeben!"); 
        }

        //****************************************************************************

        System.out.println("Bitte geben Sie die Hubhöhe an (in mm): ");
        
        eingabe_hubhoehe = bReader.readLine();
        
        try
        {
        hubhoehe = Double.valueOf(eingabe_hubhoehe);
        }
        catch (Exception e)
        {
            System.out.println("Falsche Eingabe. Nur Zahlen eingeben!"); 
        }

        //****************************************************************************

        System.out.println("Bitte geben Sie die Anzahl der Zylinder an (in mm): ");
        
        eingabe_anzahl = bReader.readLine();
        
        try
        {
        anzahl = Double.valueOf(eingabe_anzahl);
        }
        catch (Exception e)
        {
            System.out.println("Falsche Eingabe. Nur Zahlen eingeben!");
        }

        //****************************************************************************

        double hubraum = (Math.PI*radius*radius*hubhoehe)/1000;

        DecimalFormat f = new DecimalFormat("#0.000");


        System.out.print("\n");
        System.out.println("Der Hubraum beträgt: "+f.format(hubraum)+" cm³");
        System.out.print("\n");


    }

}
 
etwas in diese Richtung:
Java:
boolean isValidRadius = false;
while (!isValidRadius) {
    System.out.println("Bitte geben Sie den Radius an (in mm): ");
    eingabe_radius = bReader.readLine();
    try {
        radius = Double.valueOf(eingabe_radius);
        isValidRadius = true;
    } catch (Exception e) {
        System.out.println("Falsche Eingabe. Nur Zahlen eingeben!"); 
    }
}
 
momentmal, die Schleife fängt auch bei normaler Zahleneingabe von vorne an!

edit:
eh anscheinend sollte das nur als denkanstoß dienen... mh


Gruß
 
Zuletzt bearbeitet:
Die Deutschen wieder mal *Augen verdreh*
wie wärs mit
Java:
radius = Double.valueOf(eingabe_radius.replace(',', '.'));
 
2. Ich bin Schweizer und verwend #'###.#
Achja, die Schweizer mal wieder, verwenden ' als 1000er-Trennzeichen...😀

Schau doch bei Gelegenheit mal in ISO 31-0 rein, Dezimaltrennzeichen ist wahlweise Punkt oder Komma, ein Zeichen als 1000er-Trennzeichen ist nicht vorgesehen (höchstens über Leerzeichen). Du verstößt übrigens mit dem Punkt als Dezimaltrennzeichen gegen die Schreibweisungen der Schweizerischen Bundeskanzlei, offiziell seid ihr nämlich auch dazu angehalten, das Komma als Dezimaltrennzeichen zu verwenden...
 
eigentlich: Datei😀ecimalSeparator.png ? Wikipedia
bk.gif
 
Das '-Zeichen war nur zur Vervollständigung 🙂 Und wir sagen durchaus auch "drei Komma sieben". Der Grund, warum man trotzdem einen Punkt schreibt, muss wohl daran liegen dass man am TR / PC den . auf der Tastatur (Nummernpad) hat - zumindest mit de_CH
@Roar: interessant 😀
 
Unsere schreibweise kommt von den Banken her ist aber auch nicht so verbreitet sonst wo. Ich frage mich oft, ob das Komma jetzt als 1000er Trennzeichen oder Punkt verwendet wurde bei anderen Leuten. Sollte man mal weltweit standardisieren 🙂
 
@Roar: Juhu, ich habs gewusst, Komma ist doch weiter verbreitet als meist gedacht.

Der Grund, warum man trotzdem einen Punkt schreibt, muss wohl daran liegen dass man am TR / PC den . auf der Tastatur (Nummernpad) hat - zumindest mit de_CH
Hm, mit de_DE liegt da im Normalfall das Komma. Jetzt frage ich mich persönlich natürlich, wer hat die Festlegungen getroffen, das beim Tastaturschema de_CH da ein Punkt liegt, entgegen der Schreibweisung? Liegt es daran, dass bei euch bei Geldbeträgen ein Punkt gesetzt werden soll (besonders witzig: also 88,5 m, weil keine Währung, Fr. 23.50, weil Währung, aber 22,5 Rappen)? Und erzähl uns Deutschen nochmal, unser Schema wäre undurchsichtig, hier ist Dezimaltrennzeichen immer ein Komma, egal ob Geld oder was anderes.

Ich frage mich oft, ob das Komma jetzt als 1000er Trennzeichen oder Punkt verwendet wurde bei anderen Leuten.
Musste zuletzt mal eine von vielen Leuten zusammengestoppelte Exceldatei parsen, in der es mal so, mal so stand. Horror. Hatte dann irgendwo eine schlaue RegEx dafür gefunden (ich bin leider nicht so firm mit RegExes, sonst könnte ich das Ding jetzt auch noch wiedergeben).

Sollte man mal weltweit standardisieren
Den Versuch hat die ISO am Anfang ja gemacht und wollte nur das Komma als Dezimaltrennzeichen zulassen. Sind dann aber (wie so oft) gegenüber den Amis eingeknickt. Ausnahmsweise mal zu Recht wie ich finde (man stelle sich auch nur mal die vielen möglichen Foltermöglichkeiten in Verbindung mit csv-Dateien und Leerzeichen als 1000er-Trennzeichen vor). Erinnert mich aber schwer an den Werdegang des internationalen Datumsformat YYYY-MM-DD. Kennen wir nicht, mögen wir nicht, machen wir nicht und am Ende macht es jeder wie vorher.

Gruß FatFire
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben