Saya ingin memiliki dua variabel loop dari jenis yang berbeda. Apakah ada cara untuk membuatnya berhasil?
@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();
}
first
? Itu tidak diumumkan di mana pun. Apakah itu anggota kelas?Jawaban:
The inisialisasi dari
for
pernyataan mengikuti aturan untuk deklarasi variabel lokal .Ini akan legal (jika konyol):
for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) { // something }
Tetapi mencoba untuk mendeklarasikan perbedaan
Node
danint
tipe yang Anda inginkan tidak legal 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.
sumber
Anda tidak bisa menyukai ini. Anda bisa menggunakan beberapa variabel dengan tipe yang sama
for(Object var1 = null, var2 = null; ...)
atau mengekstrak variabel lain dan mendeklarasikannya sebelum perulangan for.sumber
Pindahkan saja deklarasi variabel (
Node<T> current
,int currentIndex
) di luar loop dan itu akan berfungsi. Sesuatu seperti iniint 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++) {
sumber
kita tidak dapat menginisialisasi tipe data yang berbeda di loop for sesuai desain mereka. Saya hanya memberikan contoh kecil.
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){ //Your Code goes here }
sumber