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!