forループの初期化で変数を宣言する必要があるのはなぜですか?


11
int v = 0;

for (v; v<2; v++) {
    ...

}

なぜこれはJavaでは許可されないのですか?

vforループの初期化で変数を宣言する必要があるのはなぜですか?私がそのようにする場合、それはステートメントではないことを知っていますが、Javaが上記を許可しないのはなぜですか?


私たちはしません。for(;;)
dehasi

3
vこれはステートメントではないため、許可されていません。これは、v;他の場所で単独で書き込むことができないのと同じ理由です。
アンディターナー

あなたはそれを必要としない強化のためのforループ。
Arvind Kumar Avinash

回答:


14

vがループの前に宣言されている場合は、forステートメントの最初の部分を空のままにする必要があります。

int v = 0;

for (; v < 2; v++) {
    ...
}

書くだけでは意味がありませんv;


6

宣言v内の無関係な要素を削除した場合、ループ宣言は有効です(v事前に宣言されていると想定)。

に変更 for(; v < 2; v++)

従来のforループの3つの修飾子はすべて、Javaではオプションです。

代替例:

以下はwhile (true)ループと同じです:

for (;;) {

}

追加の増分を追加する:

int j = 0;
for (int k = 0; k < 10; k++, j++) {

}

ループを終了するための条件を追加します。

int j = 0;
for (int k = 0; k < 10 || j < 10; k++, j++) {

}

同じ型変数の複数を宣言する:

for (int k = 0, j = 0; k < 10 || j < 10; k++, j++) {

}

そして、明らかにこれらを好きなように組み合わせて、好きなものを完全に省くことができます。


3

Javaドキュメントによると

forステートメントの一般的な形式は、次のように表すことができます。

for (initialization; termination; increment) {
    statement(s)
}

...

forループの3つの式はオプションです

forループを作成し、3つのexprの一部を空のままにできることを意味します。オプションの1つは、int vbefore beforeループを宣言することです。

int v = 0;
for(; v<2; v++)

1

で変数を宣言する必要はありませんForInit

他の人が指摘したように、単にを省略できForInitます。ただし、そこでステートメント式のリストを使用することもできます。

たとえば、新しいクラスインスタンスを作成し、メソッドを呼び出して、変数を割り当て/増分/減分することができます。

int v;
for (new String(), "".toString(), v = 0, v++;;);

(この例は無意味ですが、合法です)

ただし、これらのステートメント式をローカル変数宣言と混在させることはできません。



0

int w = 0;

テレビで;

for(v; v <2; v ++){

ループの前にvを宣言しましたが、初期化せずに再び使用しました。

すでに宣言されて初期化されているwを使用すると、以下のコードのような問題は発生しません。

for(; w <2; w ++){

}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.