Java посмотреть, содержит ли arraylist строку - PullRequest
0 голосов
/ 27 ноября 2011

У меня есть класс с именем Paragens, например:

public class Paragens {
    static int contadorParagens = 1;

    String nomeParagem;
    int id;

    public Paragens(String nomeParagem) {
        this.nomeParagem = nomeParagem;
        this.id = contadorParagens++;
    }

    // getters and setters for nomeParagem
}

Каждый объект Paragens имеет имя и идентификатор.

В этом классе есть основной метод, в котором я создаю несколько парагенов.объекты и сохраните их в ArrayList следующим образом:

public static void main(String[] args) {
    ArrayList<Paragens> paragens = new ArrayList<Paragens>();
    paragens.add(new Paragens("name1");
    // ... add more paragens
}

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

Я пытаюсь попросить пользователя ввести имя парагема, а затем я хочу посмотреть, является ли этот парагемуже в ArrayList.

String name;
System.out.println("Insert paragem name: ");
pickName = sc.nextLine();
System.out.println(paragens.contains(pickName));

Что я делаю не так?

Ответы [ 3 ]

10 голосов
/ 27 ноября 2011

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

Вы можете легко зациклить список, чтобы узнать сами:

boolean found = false;
for (Paragem p : paragems) {
    if (p.nomeParagem.equals(pickName)) { // Or use an accessor function for `nomeParagem` if appropriate
        found = true;
        break;
    }
}

... или как функция:

boolean containsParagemWithName(ArrayList<Paragem> paragems, String pickName) {
    for (Paragem p : paragems) {
        if (p.nomeParagem.equals(pickName)) {
            return true;
        }
    }
    return false;
}
1 голос
/ 27 ноября 2011

Объекты по умолчанию сравниваются по их ячейке памяти . Так что если у вас есть два Paragem с одинаковыми именами, они все равно не равны.

Итак, вы также проверяете имя каждого из них:

boolean checkDuplicate(String pickName) {
    for (Paragem p : paragems) {
      if (p.nomeParagem.equals(pickName)) return true;
    }
    return false;
}

или реализуйте (переопределите) метод equals для сравнения имен (вам следует вызывать contains для нового объекта Paragem, тогда вместо String, тем не менее).

1 голос
/ 27 ноября 2011

Ну, вам нужно реализовать метод contains самостоятельно.Выполните цикл for по всему массиву и проверьте, совпадает ли имя одного из элементов с тем, что вы пытаетесь добавить.Если нет, добавьте new Paragens(pickName).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...