Java - 尝试搜索ArrayList时不执行循环

时间:2010-11-10 07:19:17

标签: java loops for-loop arraylist

这是我关于堆栈溢出的第一个问题,但我有一些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
    出于显而易见的原因,JTextField的KeyListener名为searchField。
  • 查询
    要搜索的文本字符串。
  • I
    为什么每个人都在循环中使用i?我想这是一种编码传统。
  • 名称列表
    名称的ArrayList(嗯,duh)。
  • 搜索字符串
    要搜索的字符串(例如,尝试在 searchString 中查找查询)。
  • ITER
    到目前为止for循环的迭代次数。


    再一次,我希望我已经足够清楚了。谢谢!

4 个答案:

答案 0 :(得分:6)

你的for循环没有执行的原因是因为循环中使用的条件:

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

由于ArrayList类的size方法返回了您可能想要的元素数量 而是i < nameList.size()

答案 1 :(得分:2)

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

应该是

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

不确定您是否需要&lt;或者&lt; =但是,你只需根据需要修改它。

答案 2 :(得分:2)

你的for-loop中有一个拼写错误。不应该这样:

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

看起来像这样:

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

答案 3 :(得分:2)

几个正确的答案,但缺少一个方面:

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

这是一个老式的循环。从Java 1.5开始,你应该使用这个习惯来迭代数组或迭代(List是一个Iterable):

for(String s: strings){

}

这种更简单的语法是a)更不容易出错,以及b)迭代许多不同数据结构(包括数组和集合)的常用方法。

在内部,这是此代码的快捷方式:

for(Iterator<String> it = strings.iterator(); it.hasNext();){
    String s = it.next();
    // your code here
}