Rumah >Java >javaTutorial >Mengapa Pengimbas Saya Melemparkan InputMismatchException Apabila Membaca Double, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Pengimbas Saya Melemparkan InputMismatchException Apabila Membaca Double, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 09:43:10252semak imbas

Why Does My Scanner Throw an InputMismatchException When Reading a Double, and How Can I Fix It?

Nilai berganda pengimbas - InputMismatchException

InputMismatchException dilemparkan apabila Pengimbas cuba mendapatkan token yang tidak sepadan dengan jenis yang dijangkakan, atau apabila token itu kehabisan julat untuk jenis.

Dalam kod yang disediakan, anda menggunakan Pengimbas untuk membaca dua kali nilai yang mewakili bilangan gelen gas dalam tangki. Walau bagaimanapun, tempattempat lalai Pengimbas ialah tempattempat lalai sistem, yang mungkin mengharapkan koma (",") sebagai pembatas perpuluhan dan bukannya titik (".").

Sebab Pengecualian:

Pengecualian berlaku kerana nombor yang dimasukkan sebagai input (cth., "5.1") tidak sepadan dengan format yang dijangkakan. Tempatan Pengimbas lalai menjangkakan nombor akan diformatkan dengan koma sebagai pemisah perpuluhan. Input anda, walau bagaimanapun, menggunakan titik sebagai pemisah perpuluhan, yang melanggar format yang dijangkakan.

Cara Menghindari Masalah:

Untuk menyelesaikan isu ini, anda boleh tentukan tempat yang menggunakan titik sebagai pemisah perpuluhan menggunakan kaedah useLocale(). Contohnya:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

Dengan menyatakan Locale.US, anda memastikan bahawa Pengimbas menggunakan tempat AS, yang menggunakan titik sebagai pemisah perpuluhan. Dengan cara ini, Pengimbas akan mentafsir input dengan betul sebagai nilai berganda.

Pilihan lain, jika anda ingin mengekalkan tempat lalai sistem tetapi membenarkan kedua-dua koma dan titik sebagai pemisah perpuluhan, ialah menggunakan ungkapan biasa untuk menghuraikan rentetan input dan menukarnya secara manual kepada dua:

String input = scanner.nextLine();
double value = Double.parseDouble(input.replace(",", "."));

Atas ialah kandungan terperinci Mengapa Pengimbas Saya Melemparkan InputMismatchException Apabila Membaca Double, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn