这是我关于堆栈溢出的第一个问题,但我有一些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");
}
}
变量/对象和用途:
答案 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
}