Mengapa saya memiliki perulangan do-sementara yang tidak pernah berakhir?

Saya memiliki loop do-while yang tidak berfungsi. Ketika saya memasukkan String dan bukannya int, seharusnya tertulis "bla" dan meminta lagi untuk memasukkan nomor, namun malah mengirim teks pesan berulang-ulang. Apa yang salah dalam kode ini?

    boolean i = true;
    do {
       i = false;  

       try {
           System.out.println("insert number");
           int k = sc.nextInt();  
       }
       catch(InputMismatchException e) {
           System.out.println("test");
           i = true;
       } 
   } while ( i== true);

person Pedro Costa    schedule 01.07.2013    source sumber
comment
Lihat docs.Oracle.com/javase/7/docs /api/java/util/Scanner.html: When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.. Jadi, Anda harus melewati token setelah Anda mendapatkan InputMismatchException.   -  person Andreas Fester    schedule 01.07.2013


Jawaban (1)


Anda perlu melakukan sc.nextLine() di blok catch untuk menghapus input yang salah. Panggilan nextInt() akan meninggalkan input di buffer jika tidak cocok dengan pola int.

person Russell Zahniser    schedule 01.07.2013
comment
itu sangat membantu :D terima kasih banyak! itu rumit. - person Pedro Costa; 01.07.2013
comment
tip: i sudah menjadi boolean, jadi Anda tidak memerlukannya (i == true). Sebagai gantinya gunakan while(i). - person Fernando; 01.07.2013