Java - Benutzereingabe auf Zahlen überprüfen?


14.06.2023, 11:45

Der Parameter ändert sich zu einem int.... sprich es soll eine int Prüfung stattfinden

4 Antworten

Hey,

es gäbe da zwei Möglichkeiten, die du nutzen kannst:

Du kannst, wie oben auch, einen RegEx nutzen, das würde dann so aussehen:

public boolean onlyNumbers(String input) {
    return input.matches("^\\d+$");
}

Alternativ kannst du auch eine Methode erstellen, die dir den String direkt umwandelt, falls möglich. Dafür lässt sich bspw. Optional benutzen:

public Optional<Integer> parseToInt(String input) {
    try {
        int i = Integer.parseInt(input);
        return Optional.of(i);
    } catch (NumberFormatException exception) {
        return Optional.empty();
    }
}

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung – Aktuelles Studium in angewandter Informatik

ein int ist per definition immer eine zahl. Wenn du also ein Int von irgendwoher bekommst. Dann ist das eine Zahl. Immer. Da muss man nichts prüfen.

Ansonsten wenn du einen String hast. Und diesen dann in ein Int umwandeln musst. Geht das am einfachsten mit den Parse Methoden. ich glaube: Integer.ParseInt oder so. Die fliegt dir einfach um die Ohren wenn der String keine zahl ist die mit einem Int verarbeitet werden kann.

Ansonsten kannste einfach mit einer regex einen String auf zahlen prüfen. Anstatt a-zA-Z würd ich einfach 0-9 eintragen. Das dürfte schon ausreichen.

Woher ich das weiß:Studium / Ausbildung – Bachelor

Du musst eigenlich nur den Regex anpassen auf z.B. sowas

\d+

Vielleicht macht eine Version mit Zeilenanfang und Ende auch Sinn:

^\d+$
Lealaluuu 
Fragesteller
 14.06.2023, 11:45

Der Parameter ändert sich jedoch zu [ int eingabe]. Es soll ein int und kein String überprüft werden

0
whgoffline  14.06.2023, 11:46
@Lealaluuu

Naja, wenn deine Funktion ein Int übergeben bekommt kann es sich doch nur um Ganzzahlen handeln...?

0
Lealaluuu 
Fragesteller
 14.06.2023, 11:48
@whgoffline

geht es mit regex, oder klappt das ausschließlich für Strings. Der code dient nur als Beispiel. Darauf muss nicht aufgebaut werden

0
whgoffline  14.06.2023, 11:49
@Lealaluuu

Ein regulärer Ausdruck macht nur bei Strings Sinn... Ich glaube du solltest nochmal die Sinnhaftigkeit deiner Funktion überdenken, da wie gesagt ein int immer nur Zahlen sind (bis auf ein - Zeichen vorne).

0
Lealaluuu 
Fragesteller
 14.06.2023, 11:52
@whgoffline

Das habe ich verstanden. Ich suche nach alternativen Methoden wie man eine "int" Prüfung durchführt, vergleichbar mit dem Beispielcode für Strings oben...

0
Lealaluuu 
Fragesteller
 14.06.2023, 11:57
@whgoffline

Glaub wir reden aneinadner vorbei

Eventuell hilft dieser Code zum Verständniss was ich meine:

.
..
...
int eingabe = scanner.nextInt();
if (onlyInt(eingabe){
  System.out.println ("Die Eingabe war erfolgreich!");
}
else {
  System.out.println ("Bitte nur Zahlen verwenden!");
}
...
..
.

ich sucher eine eine Vorgehensweise für die Methode "onlyInt"

0
daCypher  14.06.2023, 12:17
@Lealaluuu

Der Beispielcode würde beim nextInt() schon eine InputMismatchException werfen, wenn der Benutzer keine Zahl eingibt. Du musst mit "onlyInt" also erstmal prüfen, ob der Benutzer eine Zahl eingegeben hat und wenn das zutrifft, kannst du die Zahl mit Integer.parseInt(eingabe) in ein int umwandeln.

Bei der Prüfung müsstest du dann aber nicht nur schauen, ob nur Ziffern eingegeben wurden, sondern auch ob ein plus oder minus vorne dran steht, ob die Zahl in ein int reinpasst (-2147483648 - 2147483647), ob vielleicht die Exponentialschreibweise benutzt wurde (12E5) und vielleicht noch andere Sachen. Daher würde ich einfach mit try-catch versuchen, die Eingabe umzuwandeln.

String eingabe = scanner.nextLine();
try {
    int eingabeZahl = Integer.parseInt(eingabe);
    System.out.println("Die Eingabe war erfolgreich: " + eingabeZahl);
} catch(NumberFormatException e) {
    System.out.printlin("Die Eingabe \"" + eingabe + "\" ist keine Zahl.");
}
1
Von Experte whgoffline bestätigt

Mit dem int-Parameter hast du einen Denkfehler. Du willst ja prüfen, ob die Benutzereingabe eine Zahl ist. Der Benutzer kann aber auch "abc" eingeben und die Funktion soll dann eben sagen "das ist keine Zahl". Also brauchst du als Parameter einen String.

Der Code wäre dann etwa so:

public boolean onlyNumbers(String eingabe) {
    return Pattern.matches("[0-9]+", eingabe);
}