2013-11-17 3 views
1

Я пытаюсь выполнить поиск по коллекции ArrayList, если пары. То, что я хочу сделать, - это пройти коллекцию и найти первое значение в паре и вернуть второе значение этой пары. Проблема, с которой я сталкиваюсь, заключается в том, что проверка, которую я должен найти, первая величина, похоже, не работает, поэтому каждый раз, когда я выполняю поиск, я возвращаю null. Я знаю, что проблема существует с моим оператором if, но я не могу понять, что я делаю неправильно. Поскольку это домашнее задание, я не могу показать весь код для моей пары класса, или моего список пара класса, но я могу показать вам метод, который я для поиска первого значения:Поиск по коллекции пар списка массивов

public S findFirst(F firstValue) { 
    Iterator<Pair> myIter = this.iterator(); 
    S tmp2 = null; 
    while (myIter.hasNext()) { 
     Pair tmp1 = myIter.next(); 
     if (tmp1.getFirst() == firstCall) { 
      tmp2 = (S) tmp1.getSecond(); 
     } 
    } 
    return tmp2; 
} 

Если я бросить в заявлении еще, что просто вызывает то, что я пытаюсь сделать в моей, если чек, как это:

else{ 
      tmp2 = (S) tmp1.getSecond(); 
     } 

тогда, когда я проверить для первого значения, я получаю второе значение, так что я знаю, что я нахожусь в по крайней мере, на правильном пути, но я предполагаю, что я делаю что-то неправильно с тем, что я проверяю в инструкции if. Кто-нибудь знает, как я могу это сделать правильно (и, пожалуйста, имейте в виду, что это домашнее задание, поэтому руководство для того, как понять это, гораздо более ценно для меня, чем просто случайный ответ, я хочу учиться, а не просто с учетом ответа) Спасибо заранее!

+0

Возможно ли использовать 'HashMap' вместо' ArrayList'? Это то, для чего они предназначены. –

+0

Прошу вас не использовать '==' для сравнения строк. – Maroun

+0

@ Давид, нет, это должен быть архаист – Xanthian23

ответ

2

Не используйте == для сравнения объектов. Переопределить и использовать equals().

+0

Вы правы. Я даже не думал об этом, я был слишком занят, пытаясь сделать сравнение, что печально, потому что я использовал theequals в своем последнем задании и фактически спорил с кем-то по поводу того, почему его умнее использовать его над знаком равенства. Я внес изменения, и теперь все работает отлично. Огромное спасибо. – Xanthian23

+0

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

2

Я думаю

if (tmp1.getFirst() == firstCall) 

, вероятно, следует сказать,

if (tmp1.getFirst().equals(firstValue)) 

Важным отличием является то, что == проверяет, являются ли два выражения относятся к точно такой же объект. Вам больше интересно узнать, действительно ли ваши два выражения относятся к объектам, которые равны.

1

Попробуйте это:

if (tmp1.getFirst().equals(firstValue)) 

вместо

if (tmp1.getFirst() == firstCall) 

Кроме того, вы можете изменить свой собственный метод равно.

Вы не должны использовать == для сравнения объектов.

Проверить How to compare two java objects

0

Что Мэтт говорит, (не используйте ==), но я думаю, что большая проблема в том, что вы не возвращаете «первой» встречи .... ваш if заявление должно выглядеть следующим образом:

public S findFirst(F firstValue) { 
    Iterator<Pair> myIter = this.iterator(); 
    while (myIter.hasNext()) { 
     Pair tmp1 = myIter.next(); 
     if (firstValue.equals(tmp1.getFirst())) { 
      return (S) tmp1.getSecond(); 
     } 
    } 
    return null; 
} 
Смежные вопросы