Mereka mengatakan bahawa pengaturcara terbaik adalah pengaturcara yang malas. Daripada melakukan jenis tindakan yang sama beberapa kali, dia akan menghasilkan algoritma yang akan melakukan kerja untuknya. Dan dia akan melakukannya dengan baik supaya tidak perlu mengulanginya. Untuk mengelakkan menulis kod yang sama berulang kali, gelung dicipta. Bayangkan kita perlu memaparkan nombor dari 0 hingga 99 ke konsol. Kod tanpa gelung:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
Kod ini akan mengambil 100 baris! Sangat banyak. Dan inilah rupanya dengan gelung:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
Hanya 3 baris!
Apakah untuk gelung?
Gelung untuk ialah struktur kawalan kod program yang memecahkan kelinearan pelaksanaan algoritma dan membolehkan anda melaksanakan kod yang ditentukan berkali-kali. Sebagai contoh, anda perlu mengambil 30 titis ubat. Algoritma akan menjadi seperti ini:- Sediakan gelas.
- Buka penutup.
- Dapatkan 1 titis.
- Dapatkan 2 titis. ...
- Dapatkan 30 titis.
- Tutup ubat.
- Ambil bahagian yang diterima.
- Sediakan gelas.
- Buka penutup titisan.
- Dapatkan 30 titis.
- Tutup ubat.
- Ambil bahagian yang diterima.
Bagaimana gelung for berfungsi
A untuk gelung digunakan seperti ini:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
Kesimpulan:
0
1
2
3
4
Jika kita menterjemah entri ini ke dalam bahasa manusia, kita mendapat yang berikut: " Buat pembolehubah i dengan nilai awal 0, sehingga ia mencapai 5, tambah 1 padanya dan pada setiap langkah tulis nilai i ke konsol ." Gelung for dalam Java adalah berdasarkan tiga peringkat, yang boleh diwakili oleh rajah berikut: Syarat untuk keluar dari gelung ialah ungkapan Boolean. Jika ia palsu, gelung akan tamat. Dalam contoh di atas, pembolehubah i
dinaikkan sebanyak 1. Jika nilainya kurang daripada 5, gelung diteruskan. Tetapi sebaik sahaja i
ia menjadi lebih besar daripada atau sama dengan 5, kitaran akan berhenti. Operator kaunter ialah ungkapan yang melakukan penukaran pada pembolehubah kaunter. Dalam contoh di atas, pembolehubah i
telah meningkat sebanyak 1. Iaitu, gelung akan dilaksanakan tepat 5 kali. Jika pengendali kaunter menambah 2 pada pembolehubah i
, hasilnya akan berbeza:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
Kesimpulan:
0
2
4
Anda juga boleh mendarab pembolehubah, membahagi, menaikkan kepada kuasa, secara umum, lakukan apa sahaja yang anda mahu. Perkara utama ialah transformasi menghasilkan nombor. Badan gelung ialah sebarang kod yang boleh dilaksanakan. Dalam contoh di atas, badan gelung mengeluarkan nilai pembolehubah i ke konsol, tetapi kandungan badan ini dihadkan oleh tugas dan imaginasi. Merumuskan keseluruhan skema, prinsip untuk gelung ini adalah seperti berikut: kod yang terdapat dalam badan gelung akan dilaksanakan seberapa banyak kali bilangan penukaran yang akan dilakukan oleh pengendali kaunter sebelum syarat untuk keluar dari gelung dicapai . Jika anda menetapkan keadaan keluar gelung sebagai true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Kemudian kod selepas gelung akan ditandakan dengan ralat unreachable statement
, kerana ia tidak akan dilaksanakan. Cabaran untuk kepintaran: akibat menjalankan kod di bawah, adakah " Loop ended
" akan menjadi output kepada konsol atau adakah gelung akan berjalan tanpa henti?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Jawapan: akan ada. Pembolehubah i lambat laun akan mencapai nilai maksimumnya, dan peningkatan selanjutnya akan mengubahnya menjadi nilai negatif maksimum, akibatnya keadaan keluar akan dipenuhi (i < = -1).
untukSetiap gelung
Apabila bekerja dengan gelung, kadangkala anda perlu mengulang tatasusunan atau koleksi. Biasanya anda boleh lelaran melalui tatasusunan menggunakan gelung for:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
Dan memang betul. Walau bagaimanapun, untuk mengulangi semua elemen tatasusunan satu demi satu, mereka menghasilkan pembinaan forEach. Tandatangannya adalah seperti berikut:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
Anda boleh lelaran melalui tatasusunan rentetan dan mencetak setiap satu ke konsol dengan cara berikut:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
Juga pendek dan padat. Yang penting, tak perlu fikir pasal kaunter dan keadaan keluar, semua dah buat untuk kita.
Bagaimana untuk gelung digunakan
Sekarang mari kita lihat beberapa contoh menggunakan gelung for dalam Java untuk menyelesaikan pelbagai masalah.Kitaran terbalik (daripada lebih besar kepada lebih kecil)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
Kesimpulan:
5
4
3
2
1
Beberapa pembolehubah dan menambah pembilang dalam badan gelung
Anda boleh menggunakan berbilang pembolehubah dalam gelung for, contohnya ia boleh ditukar dalam pernyataan balas:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
Kesimpulan:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
Atau isytiharkan dua pembolehubah dan gelung sehingga ia sama antara satu sama lain:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
Kesimpulan:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
Tidak mungkin tindakan ini mempunyai apa-apa nilai, tetapi adalah berguna untuk mengetahui tentang kemungkinan ini. Anda juga boleh membuat gelung dalam dalam gelung for. Dalam kes ini, bilangan langkah gelung akan didarabkan:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
Kesimpulan:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
Dalam gelung kaunter, j
adalah mungkin untuk mengakses kaunter gelung luar. Ini menjadikan gelung bersarang cara yang ideal untuk melintasi tatasusunan dua dimensi, tiga dimensi dan lain-lain:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
Kesimpulan:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
Penyelesaian awal kitaran
Jika anda perlu mengganggu gelung semasa memproses gelung, gunakan operatorbreak
, yang menghentikan badan semasa gelung. Semua lelaran berikutnya juga dilangkau:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
Kaedah ini akan mencetak kedudukan elemen carian pertama dalam tatasusunan:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
Kesimpulan:
1
Kitaran yang tidak berkesudahan
Satu lagi cara untuk mencipta gelung infinite for adalah dengan membiarkan kawasan pengisytiharan balas, keadaan keluar dan pernyataan balas kosong:for (;;) {
}
Tetapi perlu diingat bahawa dalam kebanyakan kes gelung tak terhingga adalah bukti ralat logik. Gelung sedemikian mesti mempunyai keadaan keluar.
GO TO FULL VERSION