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