Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
also ich weiss, dass ich mit int eingabe = Integer.parseInt(JOptionPane.showInputDialog("Zahl eingeben: "); eine Zahl bekomme, aber natürlich kann es auch zum Fehler kommen, wenn keine Zahl eingegeben wird. Da dies offensichtlich ein ganz häufiges Problem ist, wundert es mich, dass die Methode nur einen String zurückgibt. Es wäre doch perfekt, wenn nur eine Zahl angenommen werden würde und bei falscher Eingabe bei klick auf OK einfach nichts passieren würde.
ich würde das wie folgt lösen, bin mir aber fast sicher, dass es noch elegantere Lösungen gibt. da ich Anfänger bin und das Problem - wie bereits gesagt - ein häufiges sein dürfte.
Java:
int zahl = 0;
while (true) {
try {
zahl = Integer.parseInt(JOptionPane.showInputDialog("Zahl eingeben: "));
break;
} catch (Exception e) {
JOptionPane.showMessageDialog("Eingabe war keine Zahl!");
}
}
Da dies offensichtlich ein ganz häufiges Problem ist, wundert es mich, dass die Methode nur einen String zurückgibt. Es wäre doch perfekt, wenn nur eine Zahl angenommen werden würde und bei falscher Eingabe bei klick auf OK einfach nichts passieren würde.
ich würde das wie folgt lösen, bin mir aber fast sicher, dass es noch elegantere Lösungen gibt. da ich Anfänger bin und das Problem - wie bereits gesagt - ein häufiges sein dürfte.
genau darum geht es ja. wenn man eine reine Zahleneingabe will, wird es IMMER eine exception geben, wenn etwas anderes als eine Zahl eingegeben wird. kann man das ohne try-catch lösen?
genau darum geht es ja. wenn man eine reine Zahleneingabe will, wird es IMMER eine exception geben, wenn etwas anderes als eine Zahl eingegeben wird. kann man das ohne try-catch lösen?
Mach dir eine regular expression die den von dir gewünschten Wertebereich abdeckt und prüfe das mit myString.matches(...) und ob du dann die Exception immer noch abfangen willst ist deine Gewissensentscheidung
Mach dir eine regular expression die den von dir gewünschten Wertebereich abdeckt und prüfe das mit myString.matches(...) und ob du dann die Exception immer noch abfangen willst ist deine Gewissensentscheidung
kannst du mir dafür ein code-Beispiel geben? ich weiss nicht wirklich was du meinst.
Könnte ich nicht auch die Funktion showInputDialog überschreiben mit anderem Rückgabewert? public static int showInputDialog(String txt)
und müsste ich dafür von der Klasse JOptionPane erben?
public static void main(String[] args) {
Number n = null;
while (true) {
String inp = JOptionPane.showInputDialog(null, "Gib was ein, was als Zahl interpretiert werden könnte:");
if (inp == null) {
continue;
}
Matcher m1 = Pattern.compile("\\-").matcher(inp);
int c = 0;
while (m1.find()) {
c++;
}
Matcher m2 = Pattern.compile("\\d+").matcher(inp);
String str = "";
while (m2.find()) {
str += m2.group();
}
if (str.isEmpty()) {
continue;
}
try {
int i = Integer.parseInt(str);
if (c % 2 == 1) {
i = -i;
}
n = i;
} catch (NumberFormatException e1) {
try {
long l = Long.parseLong(str);
if (c % 2 == 1) {
l = -l;
}
n = l;
} catch (NumberFormatException e2) {
BigInteger b = new BigInteger(str);
if (c % 2 == 1) {
b = b.negate();
}
n = b;
}
}
break;
}
System.out.println("Du hast eingegeben: " + n);
}
Ich glaube du willst auf so etwas hinaus: Bei einer Webseite, die Bootstrap verwendet, kann man den Typ auf "number" setzen. Wenn der Benutzer auf seiner Tastatur auf einen Buchstabentaste drückt dann passiert einfach nichts. Nur wenn er Ziffern eingibt erscheinen Sie in dem Textfeld. In Chrome funktioniert dies sauber. Auf Firefox scheint es jedoch nicht zu funktionieren.
Code:
<input type="number" class="form-control" id="InputPersonalnummer" name="InputPersonalnummer" maxlength="9" min="1" max="999999999" step="1" placeholder="Geben Sie eine Personalnummer ein" required>
Ich weiß nicht, wie man das in Java macht. Fakt ist: Wenn du ein JTextField verwendest hast du viel mehr Möglichkeiten. Es lässt sich z.B. einem JTextField ein KeyListener hinzufügen. Du kannst dann sogar jedesmal darauf reagieren wenn der Benutzer ein Zeichen eingegeben hat und noch gar nicht auf OK geklickt hat.
ich glaube mittlerweile, dass dieses "Problem" doch nicht so alltäglich ist, weil wohl kaum noch einer JOptionPane.showInputDialog() benutzt, sondern alles im Rahmen einer GUI mit actionListenern händelt, richtig?
Ich hatte das "Problem" ja auch nur, weil ich erstmal ein lauffähiges Proogramm schreiben wollte und dafür die einfachste Textform für Input/Output gewählt habe.
Ich glaube du willst auf so etwas hinaus: Bei einer Webseite, die Bootstrap verwendet, kann man den Typ auf "number" setzen. Wenn der Benutzer auf seiner Tastatur auf einen Buchstabentaste drückt dann passiert einfach nichts. Nur wenn er Ziffern eingibt erscheinen Sie in dem Textfeld. In Chrome funktioniert dies sauber. Auf Firefox scheint es jedoch nicht zu funktionieren.
Das ist HTML (5), Bootstrap ist nur ein CSS-Framework und hat damit nichts zu tun.
So langsam fangen zum Glück alle Browser an, das zu unterstützen, Firefox ist da nur etwas langsam...