CodeGym /Java Blog /Acak /Pernyataan Sementara
John Squirrels
Level 41
San Francisco

Pernyataan Sementara

Dipublikasikan di grup Acak
Program pertama kami adalah urutan instruksi yang dijalankan satu demi satu. Tidak ada garpu. Ini termasuk HelloWorld, yang menampilkan salam. Ini termasuk perhitungan aritmatika. Setelah program pertama kami, kami belajar bagaimana membuat percabangan, yaitu bagaimana membuat sebuah program melakukan tindakan yang berbeda tergantung pada kondisi tertentu. Berikut kode untuk mengontrol sistem pemanas sentral dan AC:

if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort)
    heaterOn();
Ambil langkah selanjutnya. Dalam kehidupan sehari-hari, kita sering melakukan tindakan berulang yang seragam, misalnya mengupas apel untuk dijadikan pai. Proses yang menarik ini dapat digambarkan sebagai:
  1. Jika ada apel di dalam mangkuk, maka kami menjalankan langkah 1.1 hingga 1.4:

    1. 1.1. Ambil sebuah apel
    2. 1.2. Kupas dan potong-potong
    3. 1.3. Atur irisan apel di kulit pai dalam wajan
    4. 1.4. Kembali ke langkah 1.
Pernyataan while - 2Katakanlah Anda memiliki sepuluh apel, dua tangan, dan satu pisau. Dalam kehidupan nyata, Anda mengupas selusin secara berurutan, mengikuti algoritme yang sama untuk setiap apel. Tapi bagaimana kita membuat program melakukan tindakan berulang untuk setiap apel?
  • Kami mengikatkan diri pada jumlah apel, tetapi jika kami tidak memiliki cukup apel, maka beberapa perintah akan dieksekusi tanpa "muatan" (dan kami mungkin memotong diri sendiri saat mencoba mengupas apel yang tidak ada).
  • Jika ada lebih banyak apel daripada perintah untuk dikupas, maka sebagian apel akan dibiarkan tidak dikupas.
  • Kode seperti itu sulit dibaca. Ini memiliki banyak pengulangan dan sulit untuk dimodifikasi.

Loops adalah pernyataan yang memungkinkan tindakan dilakukan berulang kali

While loop Java akan bekerja dengan baik dalam kasus kami. Konstruk ini menempatkan banyak tindakan ke dalam struktur yang ringkas dan mudah dipahami. Dengan menggunakan while loop, algoritme pengiris apel untuk pai mungkin terlihat seperti ini di Java:

while (numberOfApplesInBowl > 0) {
    apple = bowl.grabNextApple();
    arrangeInPie(apple.peel().slice());
    numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
}
System.out.println("The apples for the pie have been processed.");

Sintaks perintah

Varian pertama dari pernyataan while adalah seperti ini:

while (Boolean expression) {
	// Loop body — the statement(s) that are repeatedly executed
}
Berikut penjelasan langkah demi langkah tentang apa yang terjadi saat kode ini dijalankan:
  1. Kami mengevaluasi ekspresi Boolean yang ditemukan dalam tanda kurung setelah kata kunci while .
  2. Jika ekspresi Boolean bernilai true, maka pernyataan dalam loop body akan dieksekusi. Setelah pernyataan terakhir pada loop body dieksekusi, selanjutnya kita lanjut ke langkah 1
  3. Jika ekspresi Boolean bernilai salah, maka kita melompat ke pernyataan pertama setelah perulangan while .

Ulangi dengan prasyarat

Karena kita selalu mengevaluasi ekspresi Boolean (kondisi untuk memasuki perulangan) sebelum kita mengeksekusi badan perulangan, bentuk while perulangan ini sering disebut perulangan dengan precondition . Mari kita buat tabel sepuluh kekuatan pertama dari sebuah angka:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = 1; // The result of exponentiation
    int exponent = 1; // The initial exponent
    while (exponent <= 10) { // The condition for entering the loop
        result = result * base;
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
    }
}
Keluaran konsol:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0

Loop dengan kondisi akhir

Inilah varian kedua dari loop ini:

do {
    // Loop body — the statement(s) that are repeatedly executed
} while (Boolean expression);
Berikut penjelasan tentang apa yang terjadi saat kode ini dijalankan:
  1. Tubuh loop dieksekusi (segera setelah kata kunci do ).
  2. Kami mengevaluasi ekspresi Boolean yang ditemukan dalam tanda kurung setelah kata kunci while .
  3. Jika ekspresi Boolean bernilai true, maka kita lanjut ke langkah 1
  4. Jika ekspresi Boolean bernilai salah, maka kita melompat ke pernyataan pertama setelah perulangan while .
Dua perbedaan utama dari loop sebelumnya adalah: 1) badan loop dieksekusi setidaknya sekali dan 2) ekspresi Boolean dievaluasi setelah badan loop dieksekusi. Oleh karena itu, perulangan while semacam ini disebut perulangan dengan postcondition . Kali ini kami akan menampilkan tabel kekuatan angka yang tidak melebihi 10.000:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = base; // The result of exponentiation
    int exponent = 1; // The initial exponent
    do {
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
        result = result * base;
    } while (result < 10000); // The condition for exiting the loop
}
Keluaran konsol:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
Process finished with exit code 0
Perhatikan perubahan kode. Bandingkan ini dengan loop dengan prasyarat.

Fakta menarik tentang bekerja dengan loop

Pernyataan percabangan di dalam tubuh loop

Ada dua pernyataan yang memengaruhi eksekusi dalam satu lingkaran: break (yang akan kita bahas lebih detail di bab berikutnya) dan melanjutkan.
  • continue — melompati eksekusi sisa loop body dalam iterasi saat ini dan melompat ke evaluasi ekspresi Boolean pernyataan while. Jika ekspresi bernilai true, maka loop berlanjut.
  • break — segera menghentikan eksekusi iterasi saat ini dan mentransfer kontrol ke pernyataan pertama setelah perulangan. Dengan demikian, pernyataan ini mengakhiri eksekusi loop saat ini. Kami akan mempertimbangkannya secara lebih rinci di artikel berikutnya.
Ingat contoh buah kita. Jika kita tidak yakin dengan kualitas apelnya, kita dapat mengubah kodenya menggunakan pernyataan continue :

while (numberOfApplesInBowl > 0) {
    apple = bowl.grabNextApple();
    numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
    if (apple.isBad()) { // This method returns true for rotten apples
        apple.throwInGarbage();
        continue; // Continue the loop. Jump to evaluation of numberOfApplesInBowl > 0
    }
    arrangeInPie(apple.peel().slice());
}
Pernyataan continue sering digunakan saat pernyataan di badan loop perlu dijalankan jika kondisi tertentu terpenuhi. Misalnya, kita mungkin ingin melakukan tindakan saat sensor perangkat keras dipicu (jika tidak, cukup lanjutkan loop di mana kita mengambil pembacaan sensor) atau kita mungkin ingin menghitung ekspresi hanya pada iterasi tertentu dari sebuah loop. Contoh kasus terakhir dapat dilihat dalam penggunaan while loop untuk menghitung jumlah kubus bilangan asli yang kuadratnya lebih kecil dari jumlah bilangan. Bingung? Lihat kode berikut:

public static void main(String[] args) {
    int sum = 0;  // Total amount
    int i = 0;  // Initial number in the series
    int count = 20;  // Number of numbers
    while (i <= count) {
        i++;  // Get the next number — "i++" is equivalent to "i = i + 1"
        if (i * i <= count)  // If the square of the number is less than
            continue;  // the number of numbers, then we won't calculate the sum
                            // Jump to the next number in the loop
        sum += i * i * i;  // Otherwise, we calculate the sum of the cubes of numbers
    }  // "sum += i * i * i" is notation that is equivalent to "sum = sum + i * i * i"
    System.out.println(sum);  // Print the result
}

Putaran tak terbatas

Pernyataan percabangan ini paling sering digunakan dalam loop tak terbatas. Kami menyebut loop tak terbatas jika kondisi Boolean untuk keluar dari loop tidak pernah terpenuhi. Dalam kode, tampilannya seperti ini:

while (true) {
    // Loop body 
}
Dalam hal ini, pernyataan break membantu kita keluar dari loop. Jenis loop ini cocok untuk menunggu kondisi eksternal yang ditentukan di luar tubuh loop. Misalnya di sistem operasi atau game (keluar dari loop berarti keluar dari game). Atau saat menggunakan algoritme yang mencoba, dengan setiap iterasi loop, untuk meningkatkan beberapa hasil, tetapi batasi jumlah iterasi berdasarkan waktu yang berlalu atau terjadinya peristiwa eksternal (mis. catur, catur, atau prakiraan cuaca). Ingatlah bahwa dalam kondisi normal loop tak terbatas tidak diinginkan. Untuk mendemonstrasikan, mari kembali ke eksponensial:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = 1; // The result of exponentiation
    int exponent = 1; // The initial exponent
    while (true) {
        result = result * base;
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
        if (exponent > 10)
            break; // Exit the loop
    }
}
Keluaran konsol:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0

Loop bersarang

Dan sekarang kita sampai pada topik terakhir kita tentang loop. Ingat pai apel itu (saya harap Anda tidak lapar saat ini) dan lingkaran pengupasan apel kami:
  1. Jika ada apel di dalam mangkuk, maka kami menjalankan langkah 1.1 hingga 1.4:

    1. 1.1. Ambil sebuah apel
    2. 1.2. Kupas dan potong-potong
    3. 1.3. Atur irisan apel di kulit pai dalam wajan
    4. 1.4. Kembali ke langkah 1.
Mari kita jelaskan proses pemotongan secara lebih rinci:
  1. Jumlah irisan = 0
  2. Selama jumlah irisan < 12, maka lakukan langkah 2.1 hingga 2.3

    1. 2.1. Potong apel lagi
    2. 2.2. Jumlah irisan++
    3. 2.3. Kembali ke langkah 2
Dan kami akan menambahkan ini ke algoritme pembuatan pai kami:
  1. Jika ada apel di dalam mangkuk, maka kami menjalankan langkah 1.1 hingga 1.6:

    1. 1.1. Ambil sebuah apel
    2. 1.2. Kupas
    3. 1.3. Jumlah irisan = 0
    4. 1.4. Selama jumlah irisan < 12, maka lakukan langkah 1.4.1 hingga 1.4.3
      1. 1.4.1. Potong apel lagi
      2. 1.4.2. Jumlah irisan++
      3. 1.4.3. Kembali ke langkah 1.4
    5. 1.5. Atur irisan apel di kulit pai dalam wajan
    6. 1.6. Kembali ke langkah 1.
Sekarang kita memiliki satu lingkaran di dalam satu lingkaran. Konstruksi seperti ini sangat umum. Sebagai contoh terakhir, mari buat salah satu tabel perkalian yang kita pelajari di sekolah dasar.

 public static void main(String[] args) {
    // Print the second factors in a row
    System.out.println("    2  3  4  5  6  7  8  9"); 
    int i = 2;  // Assign the first factor to the variable
    while (i < 10) {  // First loop: execute as long as the first factor is less than 10
        System.out.print(i + " | ");  // Print the first factor at the beginning of the line
        int j = 2;  // The starting value of the second factor
        while (j < 10) { // Second loop: execute as long as the second factor is less than 10
            int product = i * j;  // Calculate the product of the factors
            if (product < 10)  // If the product is a single digit, then we print two spaces after the product
                System.out.print(product + "  ");
            else  // Otherwise, print the product and one space after it
                System.out.print(product + " ");
            j++;  // Increment the second factor by one
        }  // Go to the beginning of the second loop, i.e. "while (j < 10)"
        System.out.println();  // Move to the next line on the console
        i++;  // Increment the first factor by one
    } // Go to the beginning of the first loop, i.e. "while (i < 10)"
}
Keluaran konsol:

    2  3  4  5  6  7  8  9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
Perulangan (khususnya, pernyataan while ) adalah salah satu blok bangunan mendasar dari perangkat lunak. Dengan menyelesaikan tugas di CodeGym, Anda akan mempelajari semua jenis loop yang berbeda, memahami seluk-beluknya, dan mendapatkan keterampilan praktis dalam menggunakannya.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION