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?


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;.


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.


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++)

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.


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);
        }
    }
}

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 ++) {

}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.