Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
458 / 366 / 94
Регистрация: 01.05.2010
Сообщений: 1,752
1

InputMismatchException почему бесконечный цикл при вводе?

22.04.2019, 11:35. Показов 842. Ответов 6
Метки нет (Все метки)

Всем доброго времени! Изучаю исключения в Java. Написал небольшую тестовую программу. Смысл в том, что в цикле воспринимается ввод целого числа от пользователя и затем возвращается значение из массива, по введенному индексу. Возможны два исключения:
1. Пользователь ввел несуществующий индекс. Ловится исключение IndexOutOfBoundsException, выводится на экран и ввод воспринимается снова.
2. Пользователь ввел не целое число. Ловится исключение InputMismatchException, выводится на экран и... почему-то зацикливается.... Почему так происходит? Пробовал перезаписывать переменную i валидным значением, все равно уходит в бесконечный цикл....
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.*;
 
public class FirstSample
{
    public static void main(String[] args)
    {
        int[] a = {1,2,3,4,5,6,7,8,9};
        Bad b = new Bad(a);
 
        Scanner cin = new Scanner(System.in);
        int i = -1;
        do {
            System.out.print("index: ");
            try {
                i = cin.nextInt();
                System.out.println(b.get(i));
            } catch (IndexOutOfBoundsException e) {
                System.out.println(e.getMessage() + ". Try new one or type -1 to exit.");
            } catch (InputMismatchException e) {
                System.out.println("You typed incorrect index value. Please type integer bteween " + Integer.MIN_VALUE + " and " + Integer.MAX_VALUE + ".");
            }
        } while (i != -1);
 
        System.out.println("Good bye!.");
    }
}
 
class Bad
{
    private int[] arr;
 
    public Bad(int[] a)
    {
        arr = a;
    }
 
    public int get(int i)
    {
        if (i >= arr.length) {
            throw new IndexOutOfBoundsException("No such element: "+i);
        }
        return arr[i];
    }
}
Спасибо!
0
Миниатюры
InputMismatchException почему бесконечный цикл при вводе?  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2019, 11:35
Ответы с готовыми решениями:

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл?
void mainmenu() { cout << "Введи число" << endl; cin >> choice; if (choice == 1) { cout <<...

Бесконечный цикл при вводе букв
Написал простую программку, в которой считается площадь, высота и диагонали параллелограмма. Через...

Бесконечный цикл при вводе букв
Почему если ввести в переменную управляющую циклом символ, при том ,что это переменная типа int,...

Бесконечный цикл при вводе несоответствующего типа данных
Цикл, который просит ввести пользователя число, если это число ни одно из чисел 1, 2 или 3, то цикл...

6
3042 / 2539 / 782
Регистрация: 05.07.2013
Сообщений: 12,288
22.04.2019, 11:45 2
а ты включи дебаггер и посмотри, что у тебя в i
0
3042 / 2539 / 782
Регистрация: 05.07.2013
Сообщений: 12,288
22.04.2019, 12:19 3
вот например, что видит сканер, когда мы вводим 1
1
Изображения
 
525 / 261 / 69
Регистрация: 11.12.2016
Сообщений: 1,223
22.04.2019, 17:03 4
Зверушь, А если так?
Java
1
} while (i <10 && i >=0);
Добавлено через 10 минут
Туплю,
Java
1
2
3
4
catch (InputMismatchException e) {
                System.out.println("You typed incorrect index value. Please type integer bteween " + Integer.MIN_VALUE + " and " + Integer.MAX_VALUE + ".");
                i=10;
            }
Добавлено через 4 минуты
Понял о чем вы, тоже попробовал
Код
....
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
1
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
index: You typed incorrect index value. Please type integer bteween -2147483648 and 2147483647.
...
к сожалению не знаю.
0
Супер-модератор
Эксперт PythonЭксперт Java
7533 / 4120 / 1529
Регистрация: 21.10.2017
Сообщений: 11,646
22.04.2019, 17:59 5
Цитата Сообщение от ViktorFX Посмотреть сообщение
к сожалению не знаю
Вам xoraxax уже сказал. И даже скриншот показал.

Не по теме:

Год уж наверно собираюсь тему по этому поводу в важных создать...



Добавлено через 21 минуту
Java
1
2
3
4
} catch (InputMismatchException e) {
        System.out.println("You typed ...");
        cin.next();
}
Профит
0
525 / 261 / 69
Регистрация: 11.12.2016
Сообщений: 1,223
22.04.2019, 18:14 6
iSmokeJC, Значит спасибо ему.
Вся суть в переводе в на новую строку "1\n"? Об этом я вскольз задумывался, но поскольку это не было считывание строки то и отбросил. Но вообще к сожалению я не понял ответ xoraxax, слова как бы понятны, уже сейчас доходит что сканер себе в буфер записал "1\n". При вводе например "0.5\n" у нас бесконечный цикл, и при повторном вводе во время цикла, например "1\n" непонятно почему(покрайней мере мне) буфер неперезаписывается.

Не по теме:

Да, тема со сканером неплохо бы выглядила. Я сам сканер, да и вообще считывание не очень знаю, есть сохраненные наработки (например с проверкой если следующий является интом, потом только его извлекаем а не так как здесь часто можно увидеть только извлечение) но я их не юзаю.

0
Супер-модератор
Эксперт PythonЭксперт Java
7533 / 4120 / 1529
Регистрация: 21.10.2017
Сообщений: 11,646
22.04.2019, 18:24 7
Раз уж здесь идет обработка ексепшнов, имхо правильнее было бы считывать строку (nextLine) и пытаться ее спарсить в инт. И никаких проблем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2019, 18:24

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

При вводе не числа, программа уходит в бесконечный цикл
Помогите исправить, даже не хнаю как исправить... Если написать не число, а букву допустим, так...

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int...

Как сделать, чтобы при вводе в меню (через switch) букв, не выпадал бесконечный цикл
Помогите, пожалуйста! Когда ввожу переменную не типа int, а допустим слово, то происходит...

Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл
#include &lt;iostream&gt; using namespace std; int main() { int mas; for (int i = 0; i &lt; 3;) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.