Minggu, 05 Agustus 2018

Membuat perulangan bangun segiempat sederhana dengan menggunakan Java



Pada kesempatan kali ini saya akan mencoba mempraktekkan bagaimana membuat sebuah pengulangan bintang dengan pengulangan, dengan menggunakan scanner (input) yang bersifat dinamis. Misalnya seperti ini:
*
   *
   * *
         *
         * *
         * * *
 Atau
*
  * *
  * *
       * * *
       * * *
       * * *
Dst Pada kasus di atas, berarti kita membuat 3 bangun datar. Berarti input kita ialah 3. Lalu, bagaimana kita akan memulainya? Langkah pertama ialah menentukan semua polanya, sebaiknya membuat polanya dengan menggunakan Microsoft excel untuk mempermudah pekerjaan kita. Pada kesempatan kali ini saya akan mencoba membuat pola perulangan segiempat pada gambar 2. Sebelum kita memulai membuat segiempat, mari kita siapkan terlebih dahulu apa input atau scannernya terlebih dahulu, dan saya akan menggunakan variable global untuk menampung N-nya. Seperti ini:
Pada gambar di atas, saya hanya memuat package dan method untuk menampung N untuk inputnya. Keterangan pada gambar di atas ialah Public int n, deklarasi variable global bernama ‘n’, Scanner sc = new scanner(system.in), untuk pendeklarasian variable scanner, this.n = sc.nextInt(), untuk menampung nilai scanner pada n, sc.close(), untuk mengakhiri penggunaan utility scanner, mengacu pada beberapa sumber mengenai penggunaan close, jika scanner tidak diakhiri dengan fungsi close(), maka akan mempengaruhi penggunaan scanner pada class yang lain, (koreksi jika salah!) Kita tentukan dahulu pola segiempatnya. How? Perulangan bangun datar dua dimensi, berarti melalui dua perulangan, yaitu perulangan ke samping (kolom) dan ke bawah (baris). Semisal segiempat pertama ialah segiempat 3 x 3, berarti perulangan sebanyak 3 kali ke samping, dan 3 kali ke bawah. Lalu bagaimana menentukan rumusnya? Kita bisa menggunakan iterasi for, sebanyak 2 kali, atau nested for. Sebelum jauh membuat bagaimana cara kita menggesernya, kita mulai bagaimana membuat pola untuk segiempatnya, karena bintang dari segiempat mengisi seluruh ruang dalam segiempat, maka kita tidak perlu membuat suatu kondisi untuk membuat pola tertentu. Bisa kita tulis seperti ini
 This.polaSegiEmpat = new String[n][n]  memanggil variable global dari polaSegiEmpat, kita bisa mendeklarasikan variable global ini di bawah baris “public int n”, dan cara mendeklarasikannya dengan menulisnya seperti ini [modifier] [type data] “[][]” [nama variable], pada kesempatan kali ini saya menulisnya seperti ini, “public String[][] polaSegiEmpat”. Disini menggunakan [][] karena saya menggunakan array 2 dimensi (kenapa dua? Karena jumlah “[]” ada dua, kalau hanya satu, berarti array satu dimensi). Lalu [n][n] untuk apa? Karena array harus didefinisikan alamatnya, untuk sementara kita mengisinya dengan n pada global variabel, hanya untuk test apakah kode yang saya buat sudah dapat berjalan atau masih terdapat error. Lalu kita menggunakan for 2 kali seperti pada gambar, sepanjang panjang alamat array, atau kita dapat menggantinya dengan ‘n’. Mari coba kita test dengan membuat method cetak() dan main methodnya.
Pada method cetak, kita memanggil method getN() dan setPolaSegiEmpat() agar dapat diterapkan dalam method ini. public static void main(String[] args)  merupakan main method, dan merupakan method utama yang akan di run, dimana pada sebuah aplikasi java harus memiliki 1. Lets check our code.
Yeah, We did it! やった!!!(笑) Jika dalam tahap ini kita sudah berhasil, maka tahap selanjutnya ialah bagaimana kita bisa menggeser segiempat yang kita buat dan menyusutkannya. First, kita harus membuat rumus seberapa jauh pergeserannya Mari kita buat method baru untuk membuat berapa kali pengulangannya, disini saya membuat method iterasiSegiEmpat untuk membuat berapa kali pengulangannya. Dalam method ini nantinya kita masukkan looping for untuk membuat berapa banyak pengulangannya.
Pada method getPolaSegiEmpat sebelumnya kita telah membuat array polaSegiEmpat[n][n] didalamnya, kita pindahkan deklarasi array tersebut ke method iterasiSegiEmpat. Yang perlu diperhatikan ialah bahwa panjang array bukanlah n (read, [n][n]) lagi, melainkan jumlah dari panjang dan lebar dari total sisi persegi yang kita gunakan, misalnya jika hanya ada satu persegi maka total array yang dibuat ialah [0][0], jika 2 maka [3][3], jika 3 maka [6][6], dst. Dan bagaimana rumusnya? Sejujurnya, ketika saya membuat lagi kode ini saya menghabiskan waktu sekitar tiga jam untuk menemukan letak kesalahannya, (sudah termasuk dengan makan, absent-minded syndrome, dan gangguan keponakan). Dengan menggunakan rumus (n * (n + 1)) / 2, kita dapat membuat jumlah alamat array I dan j-nya. Pada method ini saya juga memanggil method sebelumnya dengan parameter k (jumlah pengulangannya). Dan membuat perulangan k selama k kurang dari n, dan iterasi k ialah k++, atau k = k + 1. Dan akhirnya kita memasuki tahap akhir sebelum tahap yang benar-benar akhir. Yaitu saatnya kita menyunting apa yang ada di method pola segi empat.
Pada method ini, saya membuat variabel geser untuk menentukan pergeseran sesuai dengan perulangannya, maksudnya ialah ketika persegi ke 0, dengan rumus geser, saya menggeser persegi sesuai nilai k-nya, jika dihitung maka, persegi ke 0, menggeser sejauh 0 (tidak bergeser), ke 1 menggeser sejauh 1, ke 2 menggeser sejauh 3, ke 3 sejauh 6, dst. Dimana pergeseran ke bawah dan ke kanan, maka nilai I dan j setiap bergeser pasti tidak tetap, dengan kata lain, alamat array I dan j setiap perulangan dipengaruhi oleh k. maka kita buat pergeserannya sesuai k, dimana rumus geser yang saya gunakan ialah (k * (k + 1)) / 2. Karena pada method sebelumnya parameter k digunakan dalam iterasi for, maka pada method ini, nilai k juga berubah sesuai dengan urutan iterasinya dimana ketika k = 0, maka variabel gesernya adalah 0, jika k = 1 maka geser = 1, jika k = 2 maka geser = 3, jika k = 3, maka geser = 6, dst.

Dan hasilnya, menjadi seperti ini.



Lalu bagaimana menghilangkan null-nya, kita dapat menambahkan fungsi pada method cetak(). Dengan menambahkan fungsi if value sama dengan null, maka hanya menambahkan spasi.


Dan hasil akhirnya menjadi



sekian tutorial kali ini, semoga bisa bermanfaat bagi yang membaca. Terima kasih.

Tidak ada komentar:

Posting Komentar