Isi kandungan:
Video: Belajar Java #04 - Memahami Struktur Program 2024
Untuk membuat gelung program Java anda lebih mudah untuk ditulis dan mudah difahami, anda perlu tahu bagaimana pemecahan Java dan terus pernyataan mempengaruhi lelaran gelung.
Kenyataan pemecah Java
Ambil gander pada program di bawah. Program ini secara rawak menghasilkan nombor dari 1 hingga 10, dan berulang kali meminta pengguna untuk meneka nombor itu.
Listing 1
import java statik. lang. Sistem. keluar; import java. util. Pengimbas; import java. util. Rawak; kelas awam GuessAgain {public static void main (String args []) {Pengimbas papan kekunci = Pengimbas baru (System. in); int numGuesses = 0; int randomNumber = new Random (). nextInt (10) + 1; keluar. println ("************"); keluar. println ("Selamat datang ke Permainan Meneka"); keluar. println ("************"); keluar. println (); keluar. cetak ("Masukkan int dari 1 hingga 10:"); int inputNumber = keyboard. nextInt (); numGuesses ++; sementara (inputNumber! = RandomNumber) { keluar. println (); keluar. println ("Cuba lagi …"); keluar. cetak ("Masukkan int dari 1 hingga 10:"); inputNumber = keyboard. nextInt (); numGuesses ++; } keluar. cetak ("Anda menang selepas"); keluar. println (numGuesses + "guesses."); papan kekunci. dekat ();}}
Angka di bawah menunjukkan larian kod. Pengguna membuat lima tekaan. Setiap kali, komputer memeriksa untuk melihat sama ada ramalan itu betul. Teka-teki salah menghasilkan permintaan untuk mencuba lagi. Untuk meneka dengan tepat, pengguna mendapat kemenangan Anda menang, bersama-sama dengan jumlah bilangan tekaan yang dibuatnya. Komputer mengulangi beberapa pernyataan berulang kali, memeriksa setiap masa melalui untuk melihat apakah tebakan pengguna adalah sama dengan nombor yang dijana secara rawak. Setiap kali pengguna membuat tekaan, komputer menambah 1 untuk meneka pendapatnya. Apabila pengguna membuat tekaan yang betul, komputer memaparkan tally itu.
Apa yang janggal tentang program ini? Nah, beberapa kenyataan muncul lebih daripada satu kali dalam program ini. Biasanya, satu kenyataan yang disalin dari satu bahagian ke satu program kepada yang lain tidak menimbulkan kebimbangan. Namun, strategi keseluruhan kelihatan mencurigakan. Program ini mendapat nombor dari pengguna sebelum gelung dan (lagi) di dalam gelung.
keluar. cetak ("Masukkan int dari 1 hingga 10:"); int inputNumber = keyboard. nextInt (); numGuesses ++; sementara (inputNumber! = RandomNumber) {out. println (); keluar. println ("Cuba lagi …"); keluar. cetak ("Masukkan int dari 1 hingga 10:"); inputNumber = keyboard. nextInt (); numGuesses ++; }
Kod ini menggunakan helah standard untuk membuat gelung bekerja. Ia dipanggil menyebarkan gelung. Coraknya ialah
Dapatkan input manakala input yang anda miliki bukan input terakhir { Dapatkan input lebih banyak }
, komputer memeriksa keadaan yang berkaitan dengan input pengguna. Jadi komputer tidak memasukkan gelung sehingga pengguna memberikan beberapa input. Kemudian apabila komputer berada di dalam gelung, komputer meminta input yang lebih banyak untuk memberi makan lelaran seterusnya gelung. Caranya kelihatan pelik, tetapi ia berfungsi.
Pemaju menggunakan teknik ini, menyusun satu gelung, sepanjang masa, jadi ia tidak boleh menjadi yang buruk. Tetapi ada cara lain.
Listing 2
import java statik. lang. Sistem. keluar; import java. util. Pengimbas; import java. util. Rawak; kelas awam GuessAgain {public static void main (String args []) {Pengimbas papan kekunci = Pengimbas baru (System. in); int inputNumber, numGuesses = 0; int randomNumber = new Random (). nextInt (10) + 1; keluar. println ("************"); keluar. println ("Selamat datang ke Permainan Meneka"); keluar. println ("************"); keluar. println (); sementara (benar) { keluar. cetak ("Masukkan int dari 1 hingga 10:"); inputNumber = keyboard. nextInt (); numGuesses ++; jika (inputNumber == randomNumber) { break; } keluar. println (); keluar. println ("Cuba lagi …"); } keluar. cetak ("Anda menang selepas"); keluar. println (numGuesses + "guesses."); papan kekunci. close ();}}
Dari sudut pandang pengguna, kod dalam Penyenaraian 2 sama persis dengan kod dalam Penyenaraian 1. (Untuk melihat output dari salah satu program, lihat rajah di atas.) perbezaan ialah Listing 2 hanya mempunyai satu panggilan ke papan kekunci. nextInt. Panggilan itu berada di dalam gelung, jadi komputer mesti memasuki gelung tanpa menguji sebarang input.
Jika anda melihat keadaan gelung, anda dapat melihat bagaimana ini berfungsi. Keadaan gelung sentiasa berlaku. Tidak kira apa yang berlaku, keadaan gelung selalu berlalu. Jadi keadaan gelung itu adalah penipuan besar. Anda tidak akan melompat keluar dari gelung dengan gagal ujian dalam keadaan gelung. Sebaliknya, anda melompat apabila anda memukul kenyataan rehat yang berada di dalam gelung (dan anda memukul kenyataan itu apabila anda melewati sekatan jalan raya (inputNumber == randomNumber). Seluruh perkara berfungsi dengan sangat baik.
Apabila komputer mengeksekusi pernyataan rehat yang berada dalam gelung, komputer melompat keluar dari gelung (kepada pernyataan pertama yang datang selepas gelung).
Dengan pernyataan penembusan, komputer melompat dari hanya satu gelung. Jika gelung itu berlaku di dalam gelung lain (gelung luar) komputer tidak melompat di luar gelung luar.
kelas awam BreakOutOfLoop {public static void main (String [] args) { untuk (int i = 0; i <3; i ++) { for (int j = 0; j <100; j ++) { Sistem. keluar. cetak (j + ""); jika (j> 9) {break;} } Sistem. keluar. println ("saya keluar!"); } }}
Untuk menggambarkan, angka berikut mengandungi output kod sebelumnya:
Apabila komputer sampai pada kenyataan perebutan, kawalan akan melompat ke pernyataan saya.Bahawa kenyataan yang saya nyatakan adalah di luar dari gelang j tetapi ia di dalam untuk i loop.
Dari sudut pandang pengaturcara, kod dalam Penyenaraian 2 adalah lebih semula jadi dari kod dalam Penyenaraian 1. Lagi pula, bagaimanakah permainan diteruskan? Pengguna meneka, maka komputer memeriksa tatar itu, dan kemudian (jika tekaan itu tidak betul) komputer mengatakan "Coba lagi. "Itulah urutan peristiwa seperti yang dihuraikan dalam Penyenaraian 2. Tetapi dalam Penyenaraian 1, kod di dalam gelung seolah-olah menggambarkan kejadian dalam urutan terbalik: Gelung itu berkata" Cuba sekali lagi, "dan kemudian pengguna memasukkan nombor.
Penyenaraian 2 menawarkan alternatif yang bagus untuk teknik penyerapan gelung dalam Penyenaraian 1. Jadi, mengapa programmer mengganggu untuk memacu gelung mereka? Adakah kenyataan yang rosak mempunyai kelemahan tersembunyi? Jawapannya bergantung pada pandangan anda. Sesetengah pengaturcara berfikir bahawa pernyataan yang melanggar di gelung akan mengelirukan. Semua melompat dari penyataan kepada penyataan membuat mereka pening dan mengingatkan mereka sesuatu dari tahun 1960 yang dipanggil kod spaghetti . (Spaghetti menggunakan pernyataan goto untuk melompat dari satu pernyataan ke satu lagi. Dalam Pascal oleh Contoh , pengarang B. Burd berkata "Pemrograman dengan goto adalah seperti perjalanan di sekitar Paris dengan berenang melalui sistem pembetungannya. potongan pendek, tetapi tidak ada yang patut diambil. ") Salah satu cara atau yang lain, pernyataan dalam gelung adalah pengecualian, bukan peraturan. Gunakannya jika anda mahu, tetapi jangan mengharapkan untuk mencari banyak daripada mereka dalam kod Java orang lain.
Pernyataan lanjut Java
Penyenaraian 3 menawarkan lebih banyak sos rahsia untuk gelung program anda. Bayangkan permainan yang secara rawak menghasilkan tiga nombor dari 1 hingga 20. Pengguna mengambil lima bertukar meneka nombor. Apabila pengguna memasukkan tekaan yang betul, program ini mengucapkan tahniah kepada pengguna. ("Teka-teki yang baik," kata program itu.) Apabila pengguna memasuki tatar yang salah, program ini tidak memberikan maklum balas.
Penyenaraian 3 mengandungi beberapa kod untuk menjadikannya semua berlaku.
Listing 3
import java statik. lang. Sistem. keluar; import java. util. Pengimbas; import java. util. Rawak; kelas awam GuessAgainAndAgain {public static void main (String args []) {Pengimbas papan kekunci = Pengimbas baru (System. in); int inputNumber; int randNum1 = Rawak baru (). nextInt (20) + 1; int randNum2 = Rawak baru (). nextInt (20) + 1; int randNum3 = Rawak baru (). nextInt (20) + 1; keluar. println ("************"); keluar. println ("Selamat datang ke Permainan Meneka"); keluar. println ("************"); keluar. println (); untuk (int i = 0; i <5; i ++) {keluar. cetak ("Masukkan int:"); inputNumber = keyboard. nextInt (); jika (inputNumber! = RandNum1 && inputNumber! = RandNum2 && inputNumber! = RandNum3) { continue; } keluar. println ("Teka-teki yang baik!"); keluar. println ();} keluar. cetak ("Nombor adalah"); keluar. cetak (randNum1 + ""); keluar. cetak (randNum2 + ""); keluar. cetak (randNum3 + ""); papan kekunci. tutup ();}}
Angka ini menunjukkan satu run program sedemikian.
Pernyataan lanjut Java memberitahu komputer untuk melewati kenyataan yang tersisa di dalam gelung.Iaitu, bukannya melaksanakan pernyataan yang tinggal di dalam gelung, komputer bergerak ke permulaan lelaran seterusnya gelung. Oleh itu, dalam Penyenaraian 3, apabila inputNumber bukan salah satu daripada nombor yang dijana secara rawak program, komputer melompat melangkaui kod "Teka-teki yang baik", menambah kaunter gelung (pemboleh ubah i), dan meminta pengguna untuk memasukkan nilai input yang lain. (Sudah tentu, jika kaunter gelung menyentuh hadnya, komputer tidak melaksanakan lelaran yang lain. Sebaliknya, komputer melompat keluar dari gelung, dan melaksanakan apa-apa kenyataan yang datang selepas gelung.)
Anda boleh menulis semula Listing 3 dengan mudah supaya kod tersebut tidak mempunyai kenyataan terus. Anda perlu meletakkan kod "tekaan yang baik" di dalam pernyataan jika, tetapi itu akan baik-baik saja. Kenyataan yang berterusan tidak banyak dilakukan untuk memperbaiki rupa senarai Listing 3. Tetapi apabila anda ingin mengelakkan kod bersarang di dalam jika penyataan, kenyataan berterusan berguna.
Mungkin, dalam permohonan anda, baki gelung itu adalah urutan pernyataan yang rumit. Anda tidak mahu membuat urutan ini kelihatan lebih rumit dengan melampirkannya dalam kenyataan jika. Atau mungkin, dalam aplikasi anda, anda hanya jarang melangkau baki gelung, dan anda ingin menekankan kekili ini dengan tidak melampirkan baki gelung dalam pernyataan jika. Dalam mana-mana kes, kenyataan terus mungkin tepat pilihan.