Putar ulang, ganti, atau istirahat? Memutuskan dan mengulang dengan pernyataan Java

Aplikasi Java mengevaluasi ekspresi dalam konteks pernyataan , yang digunakan untuk tugas-tugas seperti mendeklarasikan variabel, membuat keputusan, atau mengulang pernyataan. Pernyataan dapat diekspresikan sebagai pernyataan sederhana atau gabungan:

  • Sebuah pernyataan sederhana adalah instruksi mandiri tunggal untuk melakukan tugas; itu harus diakhiri dengan karakter titik koma ( ;).
  • Sebuah pernyataan majemuk adalah urutan sederhana dan pernyataan majemuk lainnya terletak antara terbuka-dan dekat-brace karakter ( {dan }), yang membatasi batas-batas pernyataan majemuk ini. Pernyataan majemuk boleh kosong, akan muncul di mana pun pernyataan sederhana muncul, dan secara alternatif dikenal sebagai blok . Pernyataan gabungan tidak diakhiri dengan titik koma.

Dalam tutorial ini, Anda akan belajar bagaimana menggunakan pernyataan dalam program Java Anda. Anda dapat menggunakan pernyataan seperti if, if-else, switch, for, dan whileuntuk variabel declare dan menentukan ekspresi, keputusan make, iterate (atau loop) lebih pernyataan, istirahat dan melanjutkan iterasi, dan banyak lagi. Saya akan meninggalkan beberapa pernyataan yang lebih eksotis - seperti pernyataan untuk mengembalikan nilai dari metode yang dipanggil dan untuk melempar pengecualian - untuk tutorial Java 101 mendatang.

Ganti ekspresi di Java 12

Perhatikan bahwa tutorial ini telah diperbarui untuk Java 12 dan menyertakan pengenalan singkat pada switchekspresi.

unduh Dapatkan kodenya Unduh kode sumber untuk aplikasi contoh dalam tutorial ini. Dibuat oleh Jeff Friesen untuk JavaWorld.

Deklarasi dan tugas variabel

Saya sebelumnya telah memperkenalkan variabel Java dan menjelaskan bahwa variabel tersebut harus dideklarasikan sebelum digunakan. Karena deklarasi variabel adalah pulau kode yang berdiri sendiri, itu secara efektif adalah pernyataan - pernyataan sederhana , tepatnya. Semua ini adalah pernyataan deklarasi variabel:

int age = 25; float interest_rate; char[] text = { 'J', 'a', 'v', 'a' }; String name;

Deklarasi variabel minimal terdiri dari nama tipe, secara opsional diikuti dengan urutan pasangan kurung siku, diikuti dengan nama, secara opsional diikuti dengan urutan pasangan kurung siku, dan diakhiri dengan titik koma. Variabel juga dapat diinisialisasi secara eksplisit selama deklarasinya.

Sekarang perhatikan pernyataan penugasan , yang terkait erat dengan pernyataan deklarasi variabel. Pernyataan penugasan memberikan nilai (mungkin referensi ke array atau referensi ke objek) ke variabel. Berikut beberapa contohnya:

age = 30; interest_rate = 4.0F; age += 10; text[1] = 'A'; text[2] = 'V'; text[3] = 'A'; name = "John Doe";

Pernyataan tugas adalah contoh pernyataan ekspresi , yang merupakan ekspresi yang dapat digunakan sebagai pernyataan jika diikuti dengan titik koma. Ekspresi berikut juga memenuhi syarat sebagai pernyataan ekspresi:

  • Preincrement (misalnya, ++x;)
  • Predecrement (misalnya, --y;)
  • Postincrement (misalnya, x++;)
  • Postdecrement (misalnya, y--;)
  • Panggilan metode (misalnya, System.out.println("Hello");)
  • Pembuatan objek (misalnya, new String("ABC");)

Deklarasi variabel dengan jshell

Anda dapat menggunakan jshelluntuk bereksperimen dengan deklarasi variabel dan pernyataan ekspresi. Berikut beberapa contoh untuk Anda mulai (lihat "Mempelajari Java dari awal" untuk pengantar Java Shell):

jshell> int age = 25 age ==> 25 jshell> float interest_rate interest_rate ==> 0.0 jshell> char[] text = { 'J', 'a', 'v', 'a' } text ==> char[4] { 'J', 'a', 'v', 'a' } jshell> String name name ==> null jshell> age = 30 age ==> 30 jshell> interest_rate = 4.0F interest_rate ==> 4.0 jshell> age += 10 $7 ==> 40 jshell> text[1] = 'A' $8 ==> 'A' jshell> text[2] = 'V' $9 ==> 'V' jshell> text[3] = 'A' $10 ==> 'A' jshell> name = "John Doe" name ==> "John Doe" jshell> text text ==> char[4] { 'J', 'A', 'V', 'A' } jshell> age++ $13 ==> 40 jshell> age age ==> 41

Perhatikan bahwa age++tampaknya tidak mencapai apa pun. Di sini, Anda melihat bahwa 40telah ditetapkan ke variabel awal $13. Namun, operator postincrement melakukan kenaikan setelah mengembalikan nilai saat ini. (Sebenarnya, ia menyimpan nilai saat ini di suatu tempat, melakukan kenaikan, dan kemudian mengembalikan nilai yang disimpan.) Memasuki usia membuktikan bahwa ageberisi 41, hasil dari operasi kenaikan pos.

Java Shell menyediakan berbagai perintah dan fitur yang menyederhanakan bekerja dengan cuplikan. Misalnya, /listperintah tersebut menampilkan semua cuplikan yang telah dimasukkan di sesi saat ini:

jshell> /list 1 : int age = 25; 2 : float interest_rate; 3 : char[] text = { 'J', 'a', 'v', 'a' }; 4 : String name; 5 : age = 30 6 : interest_rate = 4.0F 7 : age += 10 8 : text[1] = 'A' 9 : text[2] = 'V' 10 : text[3] = 'A' 11 : name = "John Doe" 12 : text 13 : age++ 14 : age

Angka di kolom kiri mengidentifikasi cuplikan secara unik. Anda dapat menggunakan nomor ini untuk menjalankan kembali cuplikan, mencantumkan cuplikan, melepaskan (menghapus) cuplikan, dan seterusnya:

jshell> /12 text text ==> char[4] { 'J', 'A', 'V', 'A' } jshell> /list 13 13 : age++ jshell> /drop 7 | dropped variable $7 jshell> /list 1 : int age = 25; 2 : float interest_rate; 3 : char[] text = { 'J', 'a', 'v', 'a' }; 4 : String name; 5 : age = 30 6 : interest_rate = 4.0F 8 : text[1] = 'A' 9 : text[2] = 'V' 10 : text[3] = 'A' 11 : name = "John Doe" 12 : text 13 : age++ 14 : age 15 : text

Di sini kita telah memasukkan / 12 untuk mengeksekusi ulang cuplikan # 12, yang menampilkan konten text. Kami kemudian memasukkan / daftar 13 ke daftar potongan # 13, yang bertambah age. Selanjutnya, kita masuk / menjatuhkan 7 untuk menghapus cuplikan # 7 (tidak ada lagi age += 10cuplikan). Akhirnya, kami masuk / daftar untuk mendaftar ulang semua cuplikan. Perhatikan bahwa potongan # 7 telah dihapus, dan potongan # 15 telah ditambahkan berkat /12perintah tersebut.

Membuat keputusan: jika, jika-lain, dan beralih

Pernyataan keputusan memungkinkan aplikasi memilih di antara beberapa jalur eksekusi. Misalnya, jika seorang penjual menjual lebih dari 500 item bulan ini, berikan bonus kepada penjual tersebut. Selain itu, jika nilai siswa pada tes aljabar lebih dari 85 persen, beri selamat kepada siswa tersebut karena berhasil dengan baik; jika tidak, rekomendasikan agar siswa tersebut belajar lebih keras untuk ujian berikutnya.

Java mendukung if, if-elsedan switchpernyataan keputusan. Selain itu, switchfitur ekspresi baru telah ditambahkan ke Java 12.

Pernyataan if

Pernyataan keputusan Java yang paling sederhana adalah ifpernyataan, yang mengevaluasi ekspresi Boolean dan menjalankan pernyataan lain saat ekspresi ini bernilai true. The ifpernyataan memiliki sintaks berikut:

if (Boolean expression) statement

The ifpernyataan dimulai dengan kata reserved ifdan berlanjut dengan ekspresi Boolean kurung, yang diikuti dengan pernyataan untuk mengeksekusi ketika mengevaluasi ekspresi Boolean true.

Contoh berikut menunjukkan ifpernyataan tersebut. Ketika agevariabel berisi nilai 55 atau lebih besar, ifjalankan System.out.println(...);untuk mengeluarkan pesan:

if (age >= 55) System.out.println("You are or were eligible for early retirement.");

Banyak orang lebih suka membungkus pernyataan sederhana apa pun yang mengikuti ifpernyataan tersebut dalam kurung kurawal, secara efektif mengubahnya menjadi pernyataan gabungan yang setara:

if (age >= 55) { System.out.println("You are or were eligible for early retirement."); }

Meskipun kawat gigi mengklarifikasi apa yang dieksekusi oleh ifpernyataan tersebut, saya percaya bahwa lekukan memberikan kejelasan ini, dan bahwa kawat gigi tidak diperlukan.

Bereksperimen dengan pernyataan if

Mari kita coba contoh ini menggunakan jshell. Mulai ulang jshelldan perkenalkan agevariabel (tipe int) yang diinisialisasi ke 55:

jshell> int age = 55

Selanjutnya, masukkan ifpernyataan contoh pertama (tanpa tanda kurung kurawal di sekeliling tubuhnya):

jshell> if (age >= 55) ...> System.out.println("You are or were eligible for early retirement."); You are or were eligible for early retirement. jshell>

Perhatikan bahwa jshell>prompt berubah menjadi ...>prompt kelanjutan saat Anda memasukkan potongan multiline. Menekan Enter setelah baris cuplikan terakhir menyebabkan jshelluntuk segera mengeksekusi cuplikan.

Jalankan / daftar untuk mencantumkan semua cuplikan. Saya mengamati bahwa ifpotongan pernyataan telah ditetapkan 2dalam sesi saya. Menjalankan / 2 menyebabkan jshelldaftar dan kemudian mengeksekusi potongan ini, dan pesan yang sama adalah keluaran.

Sekarang, misalkan Anda menetapkan 25untuk agekemudian kembali mengeksekusi / 2 (atau jumlah potongan setara dalam sesi Anda). Kali ini, Anda tidak perlu mengamati pesan di output.

Pernyataan if-else

The if-elsepernyataan mengevaluasi ekspresi Boolean dan mengeksekusi sebuah pernyataan. Pernyataan yang dieksekusi bergantung pada apakah ekspresi dievaluasi menjadi benar atau salah. Berikut sintaks untuk if-elsepernyataan tersebut:

if (Boolean expression) statement1 else statement2

The if-elsepernyataan mirip dengan ifpernyataan, tapi itu termasuk kata reserved else, diikuti oleh pernyataan untuk mengeksekusi ketika ekspresi Boolean adalah palsu.

Contoh berikut menunjukkan if-elsepernyataan yang memberi tahu seseorang yang berusia kurang dari 55 tahun berapa tahun tersisa hingga pensiun dini:

if (age >= 55) System.out.println("You are or were eligible for early retirement."); else System.out.println("You have " + (55 - age) + " years to go until early retirement.");

Conditional operator vs if-else

The conditional operator (?:) is similar to an if-else statement. However, this operator cannot be used to execute alternate statements. Instead, it can only return one of two values of the same type. (The conditional operator is also sometimes known as the ternary operator.)

Chaining if-else statements

Java lets you chain multiple if-else statements together for situations where you need to choose one of multiple statements to execute:

if (Boolean expression1) statement1 else if (Boolean expression2) statement2 else ... else statementN

Chaining works by executing a subsequent if-else statement whenever the current if statement's Boolean expression evaluates to false. Consider a demonstration:

if (temperature  100.0) System.out.println("boiling"); else System.out.println("normal");

The first if-else statement determines if temperature's value is negative. If so, it executes System.out.println("freezing");. If not, it executes a second if-else statement.

The second if-else statement determines if temperature's value is greater than 100. If so, it executes System.out.println("boiling");. Otherwise, it executes System.out.println("normal");.

The dangling-else problem

When if and if-else are used together, and the source code isn't properly indented, it can be difficult to determine which if associates with the else. You can see the problem in the code below:

int x = 0; int y = 2; if (x > 0) if (y > 0) System.out.println("x > 0 and y > 0"); else System.out.println("x <= 0");

You would probably expect to see x <= 0 as the output from this code, but it will never happen; instead, nothing will output. The problem is that the else matches up to its nearest if, which is if (y > 0). Reformatting the code makes it clearer what is happening:

int x = 0; int y = 2; if (x > 0) if (y > 0) System.out.println("x > 0 and y > 0"); else System.out.println("x <= 0");

Here it's clearer than an if (y > 0) ... else ...if-else statement follows the if (x > 0) statement. To match the intent of the previous example, you need to introduce brace characters around if (y > 0) and its subsequent statement. Essentially, a block will follow if (x > 0):

int x = 0; int y = 2; if (x > 0) { if (y > 0) System.out.println("x > 0 and y > 0"); } else System.out.println("x <= 0");

Because x > 0 evaluates to false, System.out.println("x <= 0"); executes. The else reserved word clearly matches up to if (x > 0).

The switch statement

When you need to choose between several execution paths, the switch statement offers a more efficient alternative to chaining. Have a look at the switch statement:

switch (selector expression) { case value1: statement1 [break;] case value2: statement2 [break;] ... case valueN: statementN [break;] [default: statement] }

The switch statement begins with reserved word switch and continues with a selector expression that selects one of the subsequent cases or the default case to execute. The selector expression evaluates to an integer, a character, or a string.

Switch and enum constants

The selector expression can also evaluate to an enum constant. I'll introduce enums in a future tutorial.

Setiap kasus mengidentifikasi pernyataan untuk dieksekusi. Kasus dimulai dengan kata yang dipesan casedan nilai yang memberi label kasus. Mengikuti karakter titik dua ( :) adalah pernyataan yang akan dieksekusi. Pernyataan tersebut dapat secara opsional diikuti oleh break;, untuk mentransfer eksekusi ke pernyataan pertama setelahnya switch. Jika tidak ada label kasus yang cocok dengan nilai ekspresi pemilih, kasus default opsional, yang dimulai dengan kata yang dipesan default, akan dijalankan.

Di bawah ini adalah switchpernyataan yang digunakan untuk menentukan apakah nilai integer genap atau ganjil (dengan menggunakan operator sisa). Ini kemudian mengeluarkan pesan yang sesuai melalui kasus yang labelnya cocok dengan sisanya:

int i = 27; switch (i % 2) { case 0: System.out.println("even"); break; case 1: System.out.println("odd"); }