Pertanyaan Java: Inisialisasi beberapa variabel dalam loop init?


Saya ingin memiliki dua variabel pengulangan dari berbagai jenis. Apakah ada cara untuk membuat ini berfungsi?

@Override
public T get(int index) throws IndexOutOfBoundsException {
    // syntax error on first 'int'
    for (Node<T> current = first, int currentIndex; current != null; 
            current = current.next, currentIndex++) {
        if (currentIndex == index) {
            return current.datum;
        }
    }
    throw new IndexOutOfBoundsException();
}

75
2017-08-22 18:55


asal


Jawaban:


Itu inisialisasi a for Pernyataan mengikuti aturan untuk deklarasi variabel lokal.

Ini sah (jika konyol):

for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) {
  // something
}

Tetapi mencoba untuk menyatakan yang berbeda Node dan int jenis yang Anda inginkan tidak sah untuk deklarasi variabel lokal.

Anda dapat membatasi ruang lingkup variabel tambahan dalam metode dengan menggunakan blok seperti ini:

{
  int n = 0;
  for (Object o = new Object();/* expr */;/* expr */) {
    // do something
  }
}

Ini memastikan bahwa Anda tidak secara tidak sengaja menggunakan kembali variabel di tempat lain dalam metode.


89
2017-08-22 19:58



Anda tidak bisa seperti ini. Entah Anda menggunakan beberapa variabel dari jenis yang sama for(Object var1 = null, var2 = null; ...) atau Anda mengekstrak variabel lain dan mendeklarasikannya sebelum pengulangan.


14
2017-08-22 19:00



Pindahkan deklarasi variabel saja (Node<T> current, int currentIndex) di luar lingkaran dan seharusnya berfungsi. Sesuatu seperti ini

int currentIndex;
Node<T> current;
for (current = first; current != null; current = current.next, currentIndex++) {

atau bahkan mungkin

int currentIndex;
for (Node<T> current = first; current != null; current = current.next, currentIndex++) {

6
2017-08-22 18:59