Java 编译器错误:";不是一份声明”;
这是代码片段:Java 编译器错误:";不是一份声明”;,java,Java,这是代码片段: 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 = fi
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);
布尔节点过滤=false;
过滤器集=新节点集;
整数滤波;
int i;
对于(;predIter.hasNext();i
当它说
i
编译器说我有一个错误…它说它不是一个语句…事实上,这行是不正确的:
for (; predIter.hasNext(); i < filterSize)
其中:
语句在循环启动时调用一次初始化
boolean表达式在每次迭代之前进行计算。如果它产生终止
,循环终止false
语句在每次迭代后调用增量
for
循环都可以表示为,而循环:
initialization;
while(termination) {
statements;
increment;
}
正如您在代码段中所看到的,增量块是一个布尔表达式(返回布尔值
),而它应该是一个语句(它应该“做”一些事情,比如递增某个变量)。这就是编译器试图说的。for循环的最后一部分应该是一条语句——它是控件到达循环底部时将执行的语句
请记住,对于for循环(inti=0;i
,控件如下所示:
int i=0;
(执行初始化语句)
i
(执行条件检查)
如果是,则执行循环体
i++
(执行增量步骤)
回到2
正如您所看到的,4.需要发生一些事情,而不仅仅是获取表达式的值。错误在于,在for循环中,代码序列是:
for(i=0; i<10; i++) {
//Code goes here
}
对于(i=0;i)我将程序减小到最小大小,这样您就可以重现相同的错误。您很可能会自己找到答案,但如果您不能在此处再次询问,我可以添加整个代码块,但我无法……。:'(我对Java一无所知,但OP最初的for
语句在C中肯定是正确的,因为这个分号。就像@Marlon说的,没有问题,但是也不喜欢它。@Marlon:谢谢你澄清这一点。虽然for
的语法和结构在C和Java中是一样的,但看起来像是Java编译器更严格。我删除了关于C语法的部分。
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