Baza Wiedzy

InputMismatchException

Opis🔗

InputMismatchException jest wyjątkiem z grupy wyjątków nieobsługiwanych, czyli dziedziczących po klasie RuntimeException. Dzięki temu nie ma konieczności jego jawnej obsługi poprzez przechwycenie w bloku try-catch lub deklarację możliwości jego wystąpienia w nagłówku poprzez instrukcję throws.

Wyjątek InputMismatchException znajduje się w pakiecie java.util więc pełna ścieżka do klasy to java.util.InputMismatchException i należy z niej skorzystać podczas importu.

Najpopularniejsza sytuacja, w której wyjątek ten może zostać wygenerowany jest próba odczytania danych w niepoprawnym formacie np. z wykorzystaniem klasy Scanner. Jeżeli będziemy próbowali odczytać liczbę całkowitą, ale zamiast tego wprowadzimy ciąg znaków, Java wygeneruje wyjątek, ponieważ nie można przekonwertować ciągu typu "abc" na liczbę.

 

Przykład🔗

import java.util.Scanner;
 
 public class InputMismatchTest {
 
     public static void main(String[] args)  {
         Scanner scanner = new Scanner(System.in);
         System.out.println("Podaj liczbę: ");
         int number = scanner.nextInt();
         System.out.println(number);
         scanner.close();
     }
 
 }

Uruchomienie programu i wpisanie np. "abc" spowoduje wygenerowanie w konsoli komunikatu wyjątku:

inputmismatchexception

Mniej oczywisty przypadek to próba wprowadzenia liczby zmiennoprzecinkowej z nieodpowiednim separatorem dziesiętnym. W zależności od tego, czy nasza wirtualna maszyna ma konfigurację europejską (np. PL, EN, DE), czy stanów zjednoczonych (US), to oczekuje, że podamy liczbę albo z kropką (US) albo z przecinkiem (Europa).

Kurs programowania Java

import java.util.Scanner;
 
 public class InputMismatchTest {
 
     public static void main(String[] args)  {
         Scanner scanner = new Scanner(System.in);
         System.out.println("Podaj liczbę zmiennoprzecinkową: ");
         double number = scanner.nextDouble();
         System.out.println(number);
         scanner.close();
     }
 
 }

Przy założeniu, że korzystamy z polskiego systemu operacyjnego i domyślnych ustawień, próba wczytania danych z kropką, np 2.5 wygeneruje wyjątek jak poniżej:

Exception in thread "main" java.util.InputMismatchException
     at java.util.Scanner.throwFor(Scanner.java:864)
     at java.util.Scanner.next(Scanner.java:1485)
     at java.util.Scanner.nextDouble(Scanner.java:2413)
     at InputMismatchTest.main(InputMismatchTest.java:8)

 

Obsługa🔗

Wyjątek można obsłużyć w bloku try-catch, np.:

import java.util.InputMismatchException;
 import java.util.Scanner;
 
 public class InputMismatchTest {
 
     public static void main(String[] args)  {
         Scanner scanner = new Scanner(System.in);
         System.out.println("Podaj liczbę zmiennoprzecinkową: ");
         try {
             double number = scanner.nextDouble();
             System.out.println(number);
         } catch (InputMismatchException e) {
             System.out.println("Podałeś liczbę w złym formacie");
         }
         scanner.close();
     }
 
 }

Najlepszy newsletter o Javie w Polsce

Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

Komentarze do artykułu

Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.