1

这是代码片段:

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)编译器说我有一个错误......它说它不是一个声明......

4

3 回答 3

2

事实上,这一行是不正确的:

for (; predIter.hasNext(); i < filterSize)

在 Java 中(以及所有其他 C 语法语言) for语句具有以下结构:

for(initialization; termination; increment) {
  statements...
}

在哪里:

  • initialization 语句被调用一次,当循环开始时

  • termination布尔表达式在每次迭代之前进行评估。如果它产生false,循环终止

  • increment 每次迭代后都会调用语句。

实际上,每个for循环都可以表示为while循环:

initialization;
while(termination) {
  statements;
  increment;
}

正如您在代码片段中看到的,增量块是一个布尔表达式(returns boolean),而它应该是一个语句(它应该“做”一些事情,比如增加一些变量)。这就是编译器想要表达的意思。

于 2012-11-13T17:51:13.800 回答
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

希望这可以帮助!

于 2013-07-08T17:39:59.673 回答
0

for 循环的最后一部分应该是一个语句——当控制到达循环底部时将执行它。

请记住,对于 for 循环for(int i = 0; i < foo; i++),控制是这样的:

  1. int i = 0;(执行初始化语句)
  2. i < foo;(执行条件检查)
  3. 如果是,则执行循环体。
  4. i++(执行增量步骤)
  5. 回到 2。

如您所见,4. 需要发生一些事情,而不仅仅是获取表达式的值。

于 2012-11-13T17:53:16.987 回答