Mengapa variabel harus dinyatakan dalam inisialisasi loop?

11
int v = 0;

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

}

Mengapa ini tidak diizinkan di Jawa?

Mengapa kita harus mendeklarasikan variabel vdalam inisialisasi loop? Saya tahu ini bukan pernyataan jika saya melakukannya seperti itu tetapi mengapa Java tidak mengizinkan hal di atas?

mightyandweakcoder
sumber
kami tidak; for(;;)
dehasi
3
vtidak diizinkan karena itu bukan pernyataan: itu adalah alasan yang sama bahwa Anda tidak dapat menulis v;sendiri di tempat lain.
Andy Turner
Anda tidak membutuhkannya untuk forloop yang disempurnakan .
Arvind Kumar Avinash

Jawaban:

14

Jika vdideklarasikan sebelum loop, Anda harus membiarkan bagian pertama dari pernyataan for kosong:

int v = 0;

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

Tidak ada artinya hanya menulis v;.

Eran
sumber
6

Deklarasi loop Anda valid jika Anda menghapus extraneous vdalam deklarasi (dengan asumsi vdideklarasikan sebelumnya):

Ubah ke for(; v < 2; v++)

Ketiga pengubah dalam forloop tradisional adalah opsional di Jawa.

Contoh alternatif:

Di bawah ini sama dengan while (true)loop:

for (;;) {

}

Menambahkan peningkatan tambahan:

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

}

Menambahkan kondisi tambahan untuk mengakhiri loop:

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

}

Mendeklarasikan beberapa variabel tipe yang sama :

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

}

Dan jelas Anda dapat mencampur dan mencocokkan semua ini seperti yang Anda inginkan, sepenuhnya meninggalkan yang mana yang Anda inginkan.

Nexevis
sumber
3

Menurut doc java

Bentuk umum dari pernyataan for dapat diekspresikan sebagai berikut:

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

...

Tiga ekspresi dari for loop adalah opsional

Berarti Anda dapat membuat forlingkaran dan membiarkan beberapa dari 3 kosong. Salah satu opsi menyatakan int vsebelum loop:

int v = 0;
for(; v<2; v++)
Ruslan
sumber
1

Anda tidak harus mendeklarasikan variabel dalam ForInit.

Seperti yang telah ditunjukkan orang lain, Anda dapat menghilangkan ForInit; tetapi Anda juga dapat menggunakan daftar ekspresi pernyataan di sana.

Misalnya, Anda bisa membuat instance kelas baru, memanggil metode, dan menetapkan / menambahkan / mengurangi variabel:

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

(Contoh ini tidak masuk akal, tetapi legal)

Namun, Anda tidak dapat mencampur ekspresi pernyataan ini dengan deklarasi variabel lokal.

Andy Turner
sumber
0

Anda tidak membutuhkannya untuk forloop yang disempurnakan .

public class Main {
    public static void main(String[] args) {
        int[] integers = { 10, 20, 30 };
        for (int x : integers) {
            System.out.println(x);
        }
    }
}
Arvind Kumar Avinash
sumber
0

int w = 0;

di TV;

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

} Anda telah mendeklarasikan v sebelum loop tetapi Anda kembali menggunakan tanpa inisialisasi.

jika Anda menggunakan w yang sudah dinyatakan dan diinisialisasi sebelumnya maka tidak akan ada masalah. seperti kode di bawah ini,

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

}

Chandru
sumber