2

いくつか検索しましたが、 for ループの初期化ステートメントで使用できる有効な型のリストが見つかりませんでした。forループ変数宣言で使用できる型の固定リストはありますか? たとえば、次のコードを考えてみましょう。

for (int i = 0; i < 5; i++) // ...
for (String str = "a"; str.length() < 10; str+="a") // ...

前者はうまくいきますが、後者はうまくいかないと思います。for ループの初期化で許可されているすべての型のリストはありますか?

4

2 に答える 2

4

ステートメントの Java 言語仕様を見forください。ループ内で任意の型の変数を宣言して初期化できforます。また、すべて同じ型である限り、複数の変数を宣言することもできます。文法の関連する生産は次のとおりです。

BasicForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableDeclarators:
    VariableDeclarator
    VariableDeclarators , VariableDeclarator

これは、次のいずれかを実行できることを意味します。

for ( ; … ; … )                         // no variable declaration at all
for ( int i; … ; … )                    // variable declaration with no initial value
for ( int i=0; … ; … )                  // variable declaration with initial value
for ( int i=0, j=1; … ; … )             // multiple variables
for ( final Iterator<T> it = …; … ; … ) // final variable

そこの最初の例は、変数がまったく必要ないことを示しており、コメントで指摘されているように、いずれかを持つ必要はありませんForUpdate。唯一の制約は、中間に式が必要であり、ブール値の式である必要があることです。

余談ですが、 を にするForInitこともできますStatementExpressionList。つまり、変数を宣言して初期化する代わりに、いくつかのステートメントを実行することもできます。たとえば、次のようにすることもできます (ただし、これは特に役立つ例ではありません)。

for ( System.out.println( "beginning loop" ; … ; … )

これは、本体が単純な関数呼び出しである場合、ループをシミュレートする際に役立つと思いdo/whileます (やりたい場合)。

for ( method() ; condition ; method() );
于 2013-10-13T02:38:35.130 に答える
1

2番目のものもうまくいきます。任意のタイプの for for ループを使用できます

 for(String str="a";str.length()<10;str+="a")
    {
        System.out.println(str);
    }

私はあなたのシナリオを試してみましたが、結果は

a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
于 2013-10-13T02:53:24.993 に答える