Ошибка ввода.Все еще использует старый ввод даже после ввода нового ввода - PullRequest
0 голосов
/ 20 сентября 2018

Я должен сделать код таким, чтобы пользователь не мог ввести неправильное значение.

    public static String getFraction() {
        Scanner s = new Scanner(System.in);
        String fraction = s.next();
        if (validFraction(fraction)){
            return fraction;
        }
        else {
            System.out.print("Invalid fraction. Please enter a 
            fraction (a/b) or integer (a), where a and b are 
            integers and b is not zero : ");
            getFraction();
        }

Здесь, когда пользователь вводит неправильное значение, он предлагает пользователю ввести новое значение, но он по-прежнему принимаетстарое значение.

        return null;
    }

Например, скажем, если я ввожу a / b, он побуждает меня вводить снова, но так как я использую метод parseInt позже в коде, он показывает мне ошибку вроде:

Exception in thread "main" java.lang.NumberFormatException: For 
input string: "a"
at java.base/java.lang.NumberFormatException.forInputString(Num 
berFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at FractionCalculator.numerator(FractionCalculator.java:105)
    at FractionCalculator.main(FractionCalculator.java:15)

Действительная функция дроби:

public static boolean validFraction(String f) {
    if (f.contains("/")) {
        int n = f.indexOf("/");
        String num = f.substring(0, n);
        String den = f.substring(n+1);
        for (int i = 1; i<n; i++) {
            char a = num.charAt(i);
            char b = den.charAt(i);
            if (a == '-' || b == '-') {
                return false;
            }
        }
        f.replaceAll("[-]", "");
        if (isNumber(num, den)) {
            if (den.equals("0"))
                return false;
            else
                return true;
        }
    }
    else {
        if (f.matches("^[0-9]+$"))
            return true;
        }
    return false;
}

1 Ответ

0 голосов
/ 20 сентября 2018

Исключение, похоже, исходит из того места, где строки (a, b) анализируются как целые числа.

Если вы намереваетесь на самом деле это сделать и проверить, является ли строка числовой или нет, то этожелательно перехватить NumberFormatException и вернуть статус следующим образом:

      private static boolean isNumber(String string)
      {
        try
        {
          Integer.parseInt(string);
        }
        catch(NumberFormatException nfe)
        {
          return false;
        }
        return true;
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...