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 ループが開始すると、ステートメントが1回呼び出されます

  • terminationブールは、各反復の前に評価されます。が生成される場合false、ループは終了します

  • increment ステートメントは、反復ごとに呼び出されます。

事実上、すべてのforループはループとして表現できwhileます。

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

コードスニペットでわかるように、インクリメントブロックはブール式(returns boolean)ですが、ステートメントである必要があります(変数のインクリメントなど、何かを「実行」する必要があります)。これはコンパイラが言おうとしていることです。

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