Java - цикл не выполняется при поиске ArrayList - PullRequest
1 голос
/ 10 ноября 2010

это мой первый вопрос о переполнении стека, но у меня есть некоторый опыт работы с Java.Я делаю Java-приложение на данный момент (575 строк и счет!) И пытаюсь найти строку в ArrayList.Но Я не хочу, чтобы он был точным! Позвольте мне уточнить: я хочу перебрать каждый элемент ArrayList и найти в этой строке другую строку.если строка найдена в элементе ArrayList, (на данный момент) я хочу, чтобы она выводилась на консоль.Я надеюсь, что я достаточно ясно.
Ниже приведен соответствующий код.Все переменные определены и код компилируется, просто никакой вывод (из функции поиска) не печатается.Я уверен, что это потому, что цикл for не выполняется, но я озадачен, почему.

//the keylistener that calls the search() function, attached to a JTextField that the query is entered into
class searchFieldListener implements KeyListener {
    searchFieldListener() {
    }
    public void keyTyped(KeyEvent event) {
        if (event.getID() == KeyEvent.KEY_TYPED) {
            query = searchField.getText()+Character.toString(event.getKeyChar());
            System.out.println(query);
            for (i = 0; i == nameList.size(); i++) {
                search(query, i);
            }
        }
    }
    public void keyReleased(KeyEvent event) {

    }
    public void keyPressed(KeyEvent event) {

    }
}

//the troublesome search() function
void search(String query, int iter) {
    searchString = nameList.get(iter);
    System.out.println(searchString);

    if (searchString.indexOf(query) != -1) {
        System.out.println(Integer.toString(iter));
    } else {
        System.out.println("not found \n");
    }
}

Переменные / Объекты и использует:

  • searchFieldListener
    KeyListener для JTextField вызвал searchField по понятным причинам.
  • query
    Строка текста для поиска.
  • i
    Почему все используют i в циклах?Я предполагаю, что это традиция кодирования.
  • nameList
    ArrayList имен (ну, да).
  • searchString
    TheСтрока для поиска в (например, попробуйте найти запрос в searchString ).
  • iter
    Количество итерацийцикл прошел до сих пор.Еще раз надеюсь, что я был достаточно ясен.Спасибо!

Ответы [ 4 ]

6 голосов
/ 10 ноября 2010

Причина, по которой ваш цикл for не выполняется, заключается в условии, используемом в цикле:

for (i = 0; i == nameList.size(); i++) 
              ^^

Так как метод size класса ArrayList возвращает количество элементов, которые вы, возможно, захотите иметь
i < nameList.size() вместо.

2 голосов
/ 10 ноября 2010

Несколько правильных ответов, но отсутствует один аспект:

for (i = 0; i < nameList.size(); i++)

Это петля старой школы. Начиная с Java 1.5, вы должны использовать эту идиому для итерации по массиву или итерации (список является итерируемым):

for(String s: strings){

}

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

Внутренне это сокращение для этого кода:

for(Iterator<String> it = strings.iterator(); it.hasNext();){
    String s = it.next();
    // your code here
}
2 голосов
/ 10 ноября 2010

есть опечатка в вашем цикле. не должно ли это:

for (i = 0; i == nameList.size(); i++) {

выглядит так:

for (i = 0; i < nameList.size(); i++) {
2 голосов
/ 10 ноября 2010
for (i = 0; i == nameList.size(); i++)

должно быть

for (i = 0; i < nameList.size(); i++)

Не уверен, если вам нужно <или <=, вы просто измените его для своих нужд. </p>

...