возврат в логическом методе - PullRequest
0 голосов
/ 23 октября 2018

это логический метод, который является небольшой частью моего назначения.Я хочу вернуть истину или ложь на основании, если есть совпадение между входом и записью.Я думаю, что столкнулся с синтаксической проблемой.

public boolean checkPhone(String[]param) {
    for(String s: param)
    {
        for(Residents r: petshop)
        {
            if(s.equals(r.getPhone()))
            {
                return true;
            }
        }

    }       
}

это код метода, но всегда есть красная линия, указывающая, что я должен добавить return в код, иначе измените метод на void.Но я уже добавляю return true в операторе if.

Ответы [ 5 ]

0 голосов
/ 23 октября 2018

Это потому, что если ваше условие if не выполняется, то вы ничего не возвращаете.См. Это.

public boolean checkPhone(String[] param) {
   boolean isMatch = false;
      for (String s: param) {
         for (Residents r: petshop) {
           if (s.equals(r.getPhone())) {
              isMatch = true;
           }
         }

     }
   return isMatch ;
}
0 голосов
/ 23 октября 2018

В качестве альтернативы, вы можете объявить boolean retVal = false и установить его в true в случае s.equals(r.getPhone()), но всегда возвращать эту переменную.

public boolean checkPhone(String[] param) {
    // declare the return value
    boolean retVal = false;
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                retVal = true;
            }
        }
    }
    return retVal;
}

Отличие решения @ maio290 в том, что цикл всегда работает полностью,независимо от того, было ли условие выполнено в каком-то элементе или нет.Это может стать проблемой производительности.

0 голосов
/ 23 октября 2018

Сохранить состояние true внутри цикла if с переменной, а затем вернуть эту переменную в конце цикла.

Пожалуйста, обратитесь к следующему:

public boolean checkPhone(String[] param) {
    boolean state;
    for (String s: param) {
        for (Residents r: petshop) {
            if (s.equals(r.getPhone())) {
                state = true;
            }
        }

    }
    return state;
}
0 голосов
/ 23 октября 2018

Просто добавьте return false; вне цикла for, чтобы у метода был оператор return во всех возможных условиях.Это означает, что даже если при выполнении метода никогда не будет найдено совпадение, даже в этом случае метод должен иметь возможность возвращать логическое значение, т. Е. False, что означает, что он не нашел никакого совпадения.

public boolean checkPhone(String[] param)
{
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                return true;
            }
        }
    }
    return false; // This is the fix
}
0 голосов
/ 23 октября 2018

Как уже отмечалось в комментариях, вам нужно дополнительно return, потому что каждый метод с не возвращаемым типом возврата требует, чтобы каждый возможный путь имел возвращаемое значение.

public boolean checkPhone(String[] param)
{
    for (String s : param) {
        for (Residents r : petshop) {
            if (s.equals(r.getPhone())) {
                return true;
            }
        }
    }
    return false;
}
...