оператор catch выполняется при попытке успешно исправить - PullRequest
0 голосов
/ 06 сентября 2018

Здравствуйте, я только начинаю изучать Java и столкнулся с этой проблемой в проекте. Мой оператор try.catch должен проверить, что новый телефонный номер содержит только цифры и имеет длину 10 символов.

public void setBusinessPhone(String newBusinessPhone) {
    int numberTest;//Used to test if the new number contains any non digit characters.

    if (newBusinessPhone.length() != 10) { //test to see if the phone number is 10 characters in length.
        throw new IllegalArgumentException("Phone number must be 10 digits in length.");
    }

    try { //Test if the new phone number contains any non numeric characters.
        numberTest = Integer.parseInt(newBusinessPhone);
    }
    catch ( NumberFormatException e) { //Number contains invalid characters print an error message to the user.
        System.out.println("Not a legal phone number. Please enter a phone number 10 digits in length and only contains digits 0-9.");
    }
    businessPhone = newBusinessPhone;

}

При успешном выполнении оператора try оператор catch все равно будет выполняться. Как у меня код выполнить оператор catch только тогда, когда оператор try сталкивается с исключением. Заранее спасибо.

1 Ответ

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

В Java API этот метод вызывает Integer.parseInt (newBusinessPhone)

  public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);
  }

внутри parseInt (s, 10), где var s - ваш новыйBusinessPhone, API-интерфейс говорит, что число не может быть больше 2147483647. Например, parseInt ("2147483648", 10) вызывает исключение NumberFormatException, решение использует Long.parseUnsignedLong (newBusinessPhone) и использует длинный.

public void setBusinessPhone(String newBusinessPhone) {
    long numberTest;//Used to test if the new number contains any non digit characters.

    if (newBusinessPhone.length() != 10) { //test to see if the phone number is 10 characters in length.
        throw new IllegalArgumentException("Phone number must be 10 digits in length.");
    }

    try { //Test if the new phone number contains any non numeric characters.
        numberTest = Long.parseUnsignedLong(newBusinessPhone);
    }
    catch ( NumberFormatException e) { //Number contains invalid characters print an error message to the user.
        System.out.println("Not a legal phone number. Please enter a phone number 10 digits in length and only contains digits 0-9.");
    }
    businessPhone = newBusinessPhone;

}

С наилучшими пожеланиями.

...