这是代码段:
boolean nodesFiltered = false;
filterSet = newNodeSet;
int filterSize;
int i;
for (; predIter.hasNext(); i < filterSize)
{
eachPred = (Predicate)predIter.next();
filterSize = filterSet.size();
i = 0; continue;
contextNode = filterSet.get(i);
if (contextNode != null)
{
List list = new ArrayList(1);
list.add(contextNode);
predContext.setNodeSet(list);
predContext.setPosition(i + 1);
predContext.setSize(filterSize);
predResult = eachPred.evaluate(predContext);
如果它说i < filterSize)
编译器说我有错误......它说它不是声明......
答案 0 :(得分:2)
确实,这条线不正确:
for (; predIter.hasNext(); i < filterSize)
在Java (以及所有其他C语法语言)中, for
statement具有以下结构:
for(initialization; termination; increment) {
statements...
}
其中:
initialization
语句被调用一次
termination
布尔表达式。如果它产生false
,则循环终止
increment
语句。
实际上,每个for
循环都可以表示为while
循环:
initialization;
while(termination) {
statements;
increment;
}
正如您在代码片段中看到的那样 increment 块是一个布尔表达式(返回boolean
),而它应该是一个语句(它应该“做”某事,比如递增一些变量)。这就是编译器试图说的。
答案 1 :(得分:0)
for循环的最后一部分应该是一个声明 - 它是当控制命中循环底部时将执行的内容。
请记住,对于for循环for(int i = 0; i < foo; i++)
,控件如下:
int i = 0;
(执行初始化语句)i < foo;
(执行条件检查)i++
(执行增量步骤)正如您所看到的,4需要发生一些事情,而不仅仅是获取表达式的值。
答案 2 :(得分:0)
你做错了是在for循环中代码序列是:
for(i=0; i<10; i++) {
//Code goes here
}
问题是:
//You did *no* initialization, the order was wrong, and no increment.
for (; predIter.hasNext(); i < filterSize) //wrong
for (i=0; i < filterSize; i++) //Right
希望这有帮助!