2013-05-13 4 views
1

У меня есть следующий код, и я хочу проверить, есть ли у меня значение внутри массива или нет. Проблема в том, что мой код выполняет сравнение только между значением, которое я даю в качестве параметра, и последним значением в массиве, то, что я хочу проверить, - это увидеть, что у меня есть значение, а затем возвращаю значение boolean true, но мой код просто сравнить последнее значение в массиве. Код здесь:Как избежать повторения в заполнении массива

public boolean trueIdTienda(String s) { 
    boolean f = false; 
    for (int x = 0; x < lista.size(); x++) { 
     if (s.equals(ventas.getVenta(x).getIdTienda())) { 
      f = true; 
     } else { 
      f = false; 
     } 
    } 
    return f; 
} 
+0

Если вы хотите сохранить свой совершенно непрактичный код в живых, поставьте 'break' после' f = true; ' – darijan

ответ

2

Это классический алгоритм поиска:

public boolean trueIdTienda(String s) { 
    for (int x = 0; x < lista.size(); x++) { 
     if (s.equals(ventas.getVenta(x).getIdTienda())){ 
      return true; 
     } 
    } 
    return false; 
} 
+0

Мне нравится этот самый .. Я собираюсь использовать это! благодаря! –

3

Эта часть не требуется:

else { 
     f = false; 
    } 

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

Если вы оставите там часть else, она вернет значение до false после того, как оно найдет неравный. Рассмотрим поиск [1, 2] для 1, и вы увидите.

+1

@DuncanJones. Я согласен, что этот ответ немного тривиален, но я читал вопросы OP как« почему не делает », Эта функция выкрикивает истину, когда это необходимо ». –

+0

Спасибо, это работает! но в чем разница между собой, а не другим? –

+1

Это, по крайней мере, большая часть проблемы. Код проверяет только последний элемент, потому что статус соответствия каждый раз сбрасывается. (Конечно, если вы вернулись, а не просто установили флаг, это не было бы проблемой ... и код был бы более эффективным, кроме того.: P Но это в значительной степени устранит проблему.) – cHao

2

Ваша функция может быть упрощена для немедленного возврата true, если значение найдено.

public boolean trueIdTienda(String s) { 
    for (int x = 0; x < lista.size(); x++) { 
     if (s.equals(ventas.getVenta(x).getIdTienda())) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Beat me by seconds;) –

+0

спасибо всем вам ... я сожалею, что не могу проголосовать за вас, моя репутация менее 15 извините, но спасибо всем, все ответы работают –

0

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

Конечное значение логического значения является результатом сравнения с последним значением, чем решает эту проблему, чтобы добавить break; после f=true;

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