Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как заставить "try/catch" ничего не возвращать?  (Прочитано 11284 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« : 10-11-2009 06:24 » 

И снова здравствуйте.
Маленькая программка, получает сканером double от пользователя, обрабатывает и выводит результат.

Дело в том, если пользователь ввёл число с точкой, а не с запятой, появляется "InputMismatchException", пытаюсь его отловить:

Код:
int i =0;
do {

    try{

        System.out.println("Введите число: ");
        Double op1 = in.nextDouble();

        System.out.println(op1 * op1);

    } catch (InputMismatchException e) {

        System.err.println("Число введено неверно!");

    }
}
while (i == 0);

Программа выполняется кругами и после выведения результата, снова просит пользователя ввести число.

Проблема в том, что если всё-таки возникает исключение, то программа выводит следующее:

Код:
Введите число: 1.1

Число введено неверно!
Exception in thread "main" java.util.InputMismatchException

Введите число:        at java.util.Scanner.throwFor (Scanner.java: 840)
        at java.util.Scanner.next (Scanner.java: 1461)
и т.д.

Как заставить "try/catch" ничего не возвращать?
Просто {return;} пробовал, но он прерывает выполнение программы.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 10-11-2009 06:29 » 

не знаю, как в java , а в с++
Код:
do
{
    try
    {
    }
    catch (InputMismatchException e)
    {
       break;//выход из цикла
    }
}
while(1);

или

Код:
    try
    {
      do
      {
         ...
      }
      while(1);
    }
    catch (InputMismatchException e)
    {
    }
Записан

Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-11-2009 06:41 » 

Если использовать "break;", то цикл "do/while" тоже прерывается и выполнение программы завершается.

Если оставлять блок "catch" пустым, то он всё-равно возвращает сообщение об ошибке, которое втыкается в запрос на ввод числа.

Код:
Введите число: 1.1

Число введено неверно!

Введите число: Exception in thread "main" java.util.Input.MismatchException

И выполнение программы тоже прерывается
« Последнее редактирование: 10-11-2009 06:47 от Vantuz-Subhuman » Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 10-11-2009 06:48 » 

а, я понял так, что надо из цикла выйти и всё ) А про остальное - не знаю, как бороться. Вероятно, есть штатные средства завернуть вывод сообщения. Например, в блоке catch отключить вывод, а после блока - включить
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-11-2009 06:57 » 

Скорее всего, всё дело в отладочной опции, которая выводит текст происходящих исключений. В этом случае надо просто выключить опцию или собрать/запустить release, а не debug.
« Последнее редактирование: 10-11-2009 07:00 от Вад » Записан
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-11-2009 07:08 » 

Например, в блоке catch отключить вывод, а после блока - включить
В этом случае надо просто выключить опцию или собрать/запустить release, а не debug.

Как?
« Последнее редактирование: 10-11-2009 07:10 от Vantuz-Subhuman » Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Asver
Постоялец

by
Offline Offline
Пол: Мужской

« Ответ #6 : 10-11-2009 07:45 » 

Скорее всего это происходит из-за того, что при вводе неправильного числа, падает exception, а число остается в потоке ввода. При следующем nextDouble(); оно считывает тоже число.

Попробуй вот так:
Код:
Scanner in =new Scanner( System.in );
int i = 0;
do {
    try {
        System.out.println( "Введите число: " );

        Double op1 = in.nextDouble();
        System.out.println( op1 * op1 );


    } catch ( Exception e ) {

        System.out.println( "Число введено неверно!" );
        in.nextLine();
    }
}

while ( i == 0 );
Записан
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 10-11-2009 09:11 » 

Да, спасибо.
Так всё работает.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines