2012-01-13 3 views
-2

я получаю ошибку в коде из этой части моего кода:Ошибка с возвратом в Java?

public boolean findCustomer(String inPersonalNumber){ 

    // check if personal number already exist 
    for (int i=0; i<customerList.size();i++) { 
     if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      return true; 
     } 
    } 
    return true;  
} 

Когда я удаляю первое возвращение истинного и вместо того, чтобы до последнего возвращения верно, то не получает ошибку в моем затмении кода, но почему я не могу получить первое место, и будет ли это одно и то же? Благодаря!

EDIT: сообщение об ошибке из eclipse говорит: Этот метод должен возвращать результат типа boolean. Я смущен, потому что это не то, что я сделал ?!

Да, перерыв должен быть в коде

Могу ли я написать метод каким-либо иным образом?

РЕДАКТИРОВАТЬ НОМЕР 2
Почему этот код не работает?

public boolean findCustomer(String inPersonalNumber){ 

// check if personal number already exist 
for (int i=0; i<customerList.size();i++) { 
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

Этот метод возвращает логическое значение, поэтому я не понимаю, почему я получаю сообщение об ошибке !? Код выглядит правильно для меня?

+7

Возможно, это поможет, если вы упомянули о том, какая ошибка вы получаете ... И между прочим: независимо от того, что вы, функция, всегда будет возвращать 'истина', поэтому, возможно, что-то не так с вашей логикой ! – Nailuj

+0

Ваш метод компилируется отлично, и какая ошибка вы видите? – adarshr

+1

Последнее возвращение должно быть «return false»; поскольку вы не нашли клиента. Учитывая приведенные выше комментарии, возможно ли, что Eclipse жалуется, что ваш код всегда возвращает true? –

ответ

3

Ваше редактирование # 2 не компилируется, потому что есть вероятность, что ваш код не войдет в цикл for. Это будет в случае, если customerList.size() равно 0. Чтобы исправить это, вам просто нужно добавить оператор возврата после для-петли, а также:

// check if personal number already exist 
for (int i=0; i<customerList.size();i++) { 
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
     return true; 
    } 
    else { 
     return false; 
    } 
} 
return false; 

Другое дело в том, что этот код Безразлично» t логически имеют смысл: это будет только верните true или false на основе первых элементов в вашем списке. И это, вероятно, не что вы хотите. Поэтому присмотритесь к нескольким другим ответам здесь, многие из которых являются хорошими примерами того, как вы можете это сделать.

0

Похоже, вы выключили Автоматическая сборка Функция затмения. Возможно, он жалуется на ошибку, которая присутствовала, когда вы все еще не набрали свой код полностью! Это также может произойти, если по какой-то причине у вас есть резервная система.

Кроме того, не следует ли возвращать false, если условие не удовлетворяет?

public boolean findCustomer(String inPersonalNumber) { 

    // check if personal number already exist 
    for (int i = 0; i < customerList.size(); i++) { 
     if (customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

@downvoter - помогите объяснить? – adarshr

+2

Откуда вы знаете, чего он хочет? Он просто спрашивает, почему он получает ошибку. Может быть, он просто хочет знать, как работает затмение. – shift66

+1

Я не спускал вниз, но он не затрагивает вопрос, просто указывает на потенциальную проблему бизнес-логики. Это также похоже на то, что вы были тем, у кого были ответы с «перерывом» (независимо от того, сделали вы или нет), и эти downvotes были бы неуместными, если причиной этого был «перерыв». –

-1

Потому что ваша петля теряет смысл, если вы все равно возвращаетесь.
Если вы хотите остановить цикл, используйте break; вместо первого возврата.

+0

Не нужен перерыв. См. Мой ответ. – adarshr

+0

Kunem aveli vat @: D –

+0

Gago: Oks. mianshanak! – shift66

0
public boolean findCustomer(String inPersonalNumber){ 
    boolean result = false; 
    // check if personal number already exist 
    for (int i=0; i<customerList.size();i++) { 
     if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){ 
      result = true; 
      break; 
     } 
    } 
    return result ;  
} 
+0

Может быть сделано без 'break' – adarshr

+2

Я не чувствую, что это улучшение по сравнению с тем, что только что вернулся. –

+0

Кроме того, это плохой стиль кодирования. Возврат более явный. – yatskevich

0

Первое возвращение будет возвращать только в случае всех условий удовлетворены, но этот метод должен возвращаться boolean в соответствии с кодом. Ожидалось также возвращение в случае отказа.

Удаление первого возврата не повлияет на компиляцию, так как она имеет второе место, которое будет работать без каких-либо условий.

Edit: Ответ на ваш второй вопрос

Этот код имеет два возвращения, но что, если ваш CustomerList является размер 0, в этом случае также метод должен возвращать логическое значение. правильно? для этого только компилятор спрашивает.

BTW, код не имеет нулевых проверок.

Ваш последний код может быть таким. Удержание нескольких операторов возврата в коде не является хорошей практикой.

public boolean findCustomer(String inPersonalNumber) { 
    boolean retVal = false; 
    if (!(inPersonalNumber == null || inPersonalNumber.trim().equals("") 
     || customerList == null || customerList.size() == 0)) { // inputs are valid to run this check 
     // check if personal number already exist 
     for (int i = 0; i < customerList.size(); i++) { 
      if (inPersonalNumber.equals(customerList.get(i).getCustomerPersonalNumber()) { // to avoid NPE, kept inPersonalNumber in check 
       retVal = true; 
       break; 
      } 
     } 
    } 
    return retVal;  
} 
+0

@downvoter - помогите объяснить? – Vaandu

0

When I remove the first return true and instead to the last return true, it don't get the error in my eclipse code, but why can't I have the first place and would this be the same?

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

Просто измените второй оператор возврата на false, должны делать то, что вы хотите.

+0

Какой путь не возвратит значение? –

+0

@DaveNewton, если он удалил второй оператор возврата, вот что я думаю, что этот вопрос пытался спросить – NimChimpsky

+0

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