2015-11-03 5 views
0

Я пытаюсь понять, почему моя программа пропускает пользовательский ввод, поэтому я могу придумать решение. Если я намеренно даю ему плохую информацию и вызываю выброс InputMismatchException, он пропускает строку inputDouble = in.nextDouble();. Вот что вывод выглядит следующим образом:Почему моя программа пропускает nextDouble() после исключения?

Please enter floating point value or -1 to stop 
15.7 
Please enter floating point value or -1 to stop 
15.7 
Please enter floating point value or -1 to stop 
r 
Number format is incorrect please try again 
Please enter floating point value or -1 to stop 
Number format is incorrect please try again 
Total is: 31.4 

И вот мой код

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class AddingNumbers { 
    public static void main(final String[] args) { 
     Scanner in = new Scanner(System.in); 
     double inputDouble = 0; 
     double total = 0; 
     int tries = 0; 
     boolean done = false; 

     while (!done) { 
      if (tries < 2) { 
       try { 
        System.out.println("Please enter floating point value or -1 to stop"); 
        inputDouble = in.nextDouble(); 

        if (inputDouble != -1) { 
         total = total + inputDouble; 
        } else { 
         System.out.println("Total is: " + total); 
         done = true; 
        } 
       } catch (InputMismatchException exception) { 
        System.out.println("Number format is incorrect please try again"); 
        tries++; 
       } 
      } else { 
       System.out.println("Total is: " + total); 
       done = true; 
      } 
     } 

     in.close(); 
    } 
} 
+0

Какая среда? Является ли это внутри IDE, например NetBeans или Eclipse? Некоторые IDE имеют нечетные проблемы с буферизацией, которые делают его похожим на то, что ваша программа читает строку позади. Пожалуйста, сообщите нам * точно *, где и как вы делаете ввод ввода. – markspace

+0

Жаль, что это Затмение. Изменение его на inputFloat = новый сканер (System.in) .nextFloat(); исправлено это, однако теперь у меня есть ошибка для утечки ресурсов. Есть ли другой способ закрыть его, кроме in.close()? –

+0

Я отредактировал свой ответ, чтобы добавить дополнительную информацию. Если это помогло решить вашу проблему, попробуйте выбрать ее в качестве ответа. – Alexander

ответ

0

Вы можете попробовать поставить пустой in.nextLine(); прямо под вашим inputDouble=in.nextDouble();

+0

Не повезло, что я не получил тот же результат: Пожалуйста, введите значение с плавающей запятой или -1, чтобы остановить +15,7 Пожалуйста, введите значение с плавающей запятой или -1, чтобы остановить +15,7 Пожалуйста, введите значение с плавающей запятой или -1, чтобы остановить +15,7 Пожалуйста, введите значение с плавающей запятой или -1, чтобы остановить формат г номер неверен, пожалуйста, попробуйте еще раз Пожалуйста, введите значение с плавающей запятой или -1, чтобы остановить Числовой формат неверен, пожалуйста, попробуйте еще раз Тоталь: 47,09999942779541 –

0

Сканер по-прежнему имеет недопустимого ввода в буфере. Чтобы «очистить» буфер, вам нужно использовать in.nextLine();. Используйте in.nextLine(); после tries++, чтобы решить вашу проблему.

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – silwar

+0

@silwar Объясните мне, как это не ответ. Я запустил код, и он проверяет. – Alexander

+0

@Alexander Немного больше объяснений относительно * почему * это правильный ответ был бы полезен. Как есть, он просто выглядит как «попробуй это». – Vatine

Смежные вопросы