Проблема при проверки на число

252
12 октября 2017, 09:46

Создал консольный калькулятор, когда ввожу число ошибка NumberFormatException

  public int run() {
            int result = 0;
            double a = 0;
            double b = 0;
            char operation = ' ';
            System.out.println("Enter a first number");
            Scanner scanner = new Scanner(System.in);
            while (validNumber(scanner.next())) {
                a = Double.parseDouble(scanner.nextLine());
                break;
            }
            System.out.println("Enter a last number");
            while (validNumber(scanner.nextLine())) {
                b = Double.parseDouble(scanner.nextLine());
                break;
            }
            System.out.println("Enter operation");
                operation = scanner.nextLine().charAt(0);
result = (int) calc(a, b, operation);
System.out.println(result);
            return result;
        }
    private boolean validNumber(String text) {
            try {
                Integer.parseInt(text);
                return true;
            } catch(NumberFormatException e) {
                return false;
            }
        }
Answer 1

Для того, что бы не было ошибки NumberFormatException в вашем коде требуется:

  1. читать scanner в строку и работать с ней

    String input = scanner.next();

и дальше работаем с input.

Иначе после прочтения scanner-а функцией validNumber scanner будет пуст.

  1. Что бы не прерывать while при "не числе"

Убрать или затащить break под if. Сейчас Вы независимо от парсинга применяете break. Естественно while прерывается.

Пример правильно while:

while (true)
{
    System.out.println("Enter a first number");
    String input = scanner.next();
    if (validNumber(input))
    {
        a = Double.parseDouble(input);
        break;
    }
    System.out.println("Not a correct input");
}
Answer 2

Если просто нужна проверка на число, то можно сделать все проще(тут также учтено, что число может быть отрицательным)

private boolean validNumber(String text) {
  return text.matches("[-+]?\\d+");
}
READ ALSO
Что такое статический полиформизм?

Что такое статический полиформизм?

Наткнулся на такой термин - "статический полиформизм"Не знал про такое сочетание

194
webView не отображает страницу на android ниже 4.4.4

webView не отображает страницу на android ниже 4.4.4

Раньше работало на версиях от 41, теперь не работает до 4

233
Авторизация в БД MySQL C# WPF MVVM

Авторизация в БД MySQL C# WPF MVVM

Здравствуйте! Пишу авторизацию на C# WPF MVVM в БД MySQL, используя EF6Необходимо написать команду, которая будет выполняться при нажатии на кнопку...

891