Проблема преобразования двойного в логическое значение - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над проектом в своем классе Java, который использует несколько классов, а также графический интерфейс (не уверен, что эта информация актуальна).Мой партнер по группе и я столкнулись с проблемой, хотя.У нас есть класс Validator, который должен проверять «SSN», но нам постоянно выдается ошибка:

java:146: error: incompatible types: double cannot be converted to boolean
                    if(Validator.isValidSSN(jTextFieldEmpSSN)){

Теперь очевидно, что java: 146 - это строка.код, который мы имеем для каждого класса:

класс employeeUI (тот, который показывает ошибку):

private void jButtonEnterActionPerformed(java.awt.event.ActionEvent evt) 
{
        Employee e=new Employee();

        if(Validator.isValidName(jTextFieldEmpFirst)){
            if(Validator.isValidName(jTextFieldEmpLast)){
               if(Validator.isValidEmail(jTextFieldEmpEmail)){
                    if(Validator.isValidSSN(jTextFieldEmpSSN)){
        e.setFirstName(jTextFieldEmpFirst.getText());
        e.setLastName(jTextFieldEmpLast.getText());
        e.setEmailAdd(jTextFieldEmpEmail.getText());
        e.setSSN(Integer.parseInt(jTextFieldEmpSSN.getText()));
}}}}

и класс Validator для isValidSSN:

public static double isValidSSN(JTextField textfield)
{
    double number = 0;
    boolean inRange = false;
    while(!inRange)
    {
        number = Double.parseDouble(textfield.getText());
        if (number >= 100000000 && number <= 999999999) 
        {
            inRange = true;

        } else {}
    } 

    return number;
}

Мы довольно долго били головой о том, как это исправить, но все теряемся.Мы что-то упустили?Мы будем очень признательны за любую помощь в этом.

1 Ответ

0 голосов
/ 24 февраля 2019

Если бы я спросил: «Является ли 123-45-6789« действительным SSN? », Вы бы не ответили« 123456789.0 », не так ли? Вы бы дали мне да или нет. Возвращая double ваш методделает первое. Он отвечает числом вместо ответа на вопрос.

Хорошее практическое правило заключается в том, что методы, начинающиеся с is или has, должны возвращать boolean с. "это действительный SSN? "- это вопрос да / нет, поэтому isValidSSN должен возвращать программный эквивалент да / нет.

public static boolean isValidSSN(JTextField textfield)

Здесь есть еще пара точек проектирования:

  • Цикл не нужен. SSN либо действителен, либо нет.

  • Текстовое поле само по себе не является SSN. Оно содержит некоторыеtext, а этот текст - SSN. Вместо того, чтобы брать текстовое поле и искать текст в поле с помощью getText(), было бы лучше, если бы isValidSSN взял текст напрямую. Пусть вызывающая сторона извлекать текст из текстового поля.

    В более широком смысле это называется принципом единой ответственности ..Каждый метод в идеале должен делать только одну вещь.

Результат:

public static boolean isValidSSN(String ssn) {
    double number = Double.parseDouble(ssn);

    if (number >= 100000000 && number <= 999999999) {
        return true;
    }
    else {
        return false;
    }
}

PS Если я не упомяну это, кто-то обязательно прокомментирует, что *Блоки 1035 * и else не нужны;можно вернуть результат if напрямую.Они были бы правы, хотя я считаю это немного продвинутым трюком.Это будет выглядеть так:

public static boolean isValidSSN(String ssn) {
    double number = Double.parseDouble(ssn);
    return number >= 100000000 && number <= 999999999;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...