【问题标题】:Java - For loop not executing when trying to search ArrayListJava - 尝试搜索 ArrayList 时未执行 For 循环
【发布时间】:2011-05-07 17:22:50
【问题描述】:

这是我关于堆栈溢出的第一个问题,但我有一些 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?我想这是一种编码传统。
  • 姓名列表
    名称的 ArrayList(嗯,呵呵)。
  • 搜索字符串
    要搜索的字符串(如,尝试在searchString中查找query)。
  • 迭代
    到目前为止 for 循环的迭代次数。


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

【问题讨论】:

    标签: java loops for-loop arraylist


    【解决方案1】:

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

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

    这是一个老式循环。从 Java 1.5 开始,您应该使用此习惯用法来迭代数组或可迭代对象(List 是可迭代对象):

    for(String s: strings){
    
    }
    

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

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

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

    【讨论】:

    • ahh.. 听说过这些特殊的 for 循环,将研究并付诸实践。
    【解决方案2】:

    在你的 for 循环中有错字。不应该这样吗:

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

    看起来像这样:

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

    【讨论】:

      【解决方案3】:
      for (i = 0; i == nameList.size(); i++)
      

      应该是

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

      不确定是否需要

      【讨论】:

        【解决方案4】:

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

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

        由于 ArrayList 类的 size 方法返回您可能想要的元素数量
        改为i &lt; nameList.size()

        【讨论】:

        • 谢谢!令人惊讶的是,人们回复的速度如此之快!与所有回答的人一样,我真的,真的很感激。
        猜你喜欢
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2015-01-29
        • 1970-01-01
        相关资源
        最近更新 更多