Zapobieganie użycia kropki lub przecinka w zmiennej typu double

0

Witam. W sumie od dnia dzisiejszego rozpocząłem naukę języka Java. Wcześniej miałem kontakt tylko z c++ i napisałem sobie taki program (stopniowo rozbudowuję, aby uczyć się działania konkretnych poleceń):

import java.util.Scanner; // instrukcja importu. Konieczna do obiektu Scanner

public class WitajSwiecie {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String wpisane_imie; // zmienna, do której wprowadzamy imię
        double deklarowany_dochod; // zmienna do której wprowadzimy liczbę zmiennoprzecinkową
        double podwyzka = 500.65;
        double kwota_po_podwyzce;

        Scanner wpisz = new Scanner(System.in); //obiekt do odebrania danych od użytkownika

        System.out.print("Wprowadz swoje imię: ");  
        wpisane_imie = wpisz.nextLine(); // odebranie od użytkownika jednej linii znaków, czyli tekstu zakończonego klawiszem enter

        System.out.print("Podaj jeszcze swój dochód z groszami: ");
        deklarowany_dochod = wpisz.nextDouble(); // odebranie od użytkownika liczby zmiennoprzecinkowej

        kwota_po_podwyzce = deklarowany_dochod + podwyzka;

        System.out.println("Witaj " + wpisane_imie + ". Twój dochód został podwyższony o " + podwyzka + " i wynosi teraz " + kwota_po_podwyzce + ".");
    }

}

Działanie jest proste:
1) użytkownik wpisuje swoje imię
2) wprowadza swój dochód, może być z wartościami dziesiętnymi lub setnymi po przecinku
3) jego dochód zostaje powiększony o "podwyżkę"

Poniżej przykład, jak działa program:

Wprowadz swoje imię: Mariusz
Podaj jeszcze swój dochód z groszami: 678,14
Witaj Maciej. Twój dochód został podwyższony o 500.65 i wynosi teraz 1178.79.

Wszystko się zgadza, jeśli ułamki są po przecinku (np. 333,15). Jeśli wartość zostanie wpisana z kropką (np. 333.15) to pojawia się błąd:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at WitajSwiecie.main(WitajSwiecie.java:21)

Dodam, że używam środowiska Eclipse w najnowszej dostępnej wersji. Czy jest to możliwe tylko za pomocą "getInstance();" ? Chciałbym, aby było możliwe użycie ZARÓWNO przecinka JAK I kropki. Czy po prostu stworzyć funkcję (klasę?) zamieniającą liczbę double na string, zamiana kropek na przecinki (i na odwrót - zależnie jak sobie zażyczę) i ponowną zamianę zmiennej na double (jeśli to w ogóle możliwe)?

Z góry dziękuję za pomoc.

0

Nie jestem pewny czy pomoże bo chwilowo nie mogę sprawdzić ale spróbuj tak:

Scanner wpisz = new Scanner(System.in); 
wpisz.useDelimiter("(\\p{javaWhitespace}|\\.|,)+");
0
Pieter24 napisał(a):

Nie jestem pewny czy pomoże bo chwilowo nie mogę sprawdzić ale spróbuj tak:

Scanner wpisz = new Scanner(System.in); 
wpisz.useDelimiter("(\\p{javaWhitespace}|\\.|,)+");

ŚWIETNIE. Działa. Bardzo dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0