Fun & Tutorial: Java Fibonacci

Reading Time: 7 minutes

Selamat datang di blogs UNYDeveloperNetwork. Pada kesempatan kali ini, Saya akan kembali menuliskan tutorial yang FUN dan yang sering keluar dalam materi – materi pemrograman dasar maupun algoritma pemrograman. Membuat program generator deret Fibonacci. Apakah itu deret Fibonacci? apa menariknya dari deret Fibonacci tersebut? Bagaimana cara membuat programnya? Mari kita simak artikel ini sampai akhir.

Sebelum kita melangkah jauh ke dalam tutorial, ada baiknya kita berkenalan terlebih dahulu dengan deret Fibonacci.

Pernahkah Anda melihat deret angka seperti di bawah ini?

0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946 ... dst

Ya, deret di atas adalah contoh deret Fibonacci. deret ini pertama kali dijelaskan oleh matematikawan dari India, Gopala dan Hemachandra pada tahun 1150 (wikipedia) dan dipelajari oleh Leonardo da Pisa pada tahun 1200-an yang akhirnya dikenal dengan nama Fibonacci.

Fibonacci adalah suatu deret bilangan yang anggota – anggotanya merupakan penjumlah dari dua bilangan sebelumnya (rumuspintar.com). Deret Fibonacci dimulai dari angka 0 dan 1; sehingga secara sederhana deret Fibonacci dapat ditampilkan sebagai berikut:

  • N1 = 0
  • N2 = 1
  • N3 = 1 (0 + 1)
  • N4 = 2 (1 + 1)
  • N5 = 3 (1 + 2)
  • N6 = 5 (2 + 3)
  • N7 = 8 (3 + 5)
  • N8 = 13 (5 + 8)
  • dst …..

Dari contoh sederhana deret Fibonacci di atas, kita akan membuat programnya sehingga deret Fibonacci dapat ditampilkan secara otomatis berapapun jumlahnya.

Bagaimana output program yang akan kita buat? mari kita lihat tangkapan layar di bawah ini.

Program yang akan kita buat adalah menggunakan konsep limiter. Jadi, deret Fibonacci akan ditampilkan sesuai dengan limiter yang kita masukkan. Apabila kita memasukkan nilai 5, maka program akan menampilkan 5 anggota deret Fibonacci. Jika kita memasukkan nilai 10, maka program akan menampilkan 10 anggota deret Fibonacci, dan begitu seterusnya.

Bagaimanakah membuat program generator deret Fibonacci ini? mari kita simak langkah – langkah di bawah ini satu persatu.

Seperti pada umumnya pada pembuatan aplikasi Java, kita buat terlebih dahulu class dan main methodnya.

public class JavaFibonacci {
     public static void main(String[] args){
     }
}

Selanjutnya, kita import library yang kita perlukan. Karena kita memerlukan inputan dari user, maka kita mengimport dua library yang berfungsi untuk menghandle inputan dari user dan menghandle kesalahan input yang dilakukan oleh user.

import java.util.InputMismatchException;
import java.util.Scanner;

Setelah mengimport library yang diperlukan, kita lanjutkan dengan membuat return value method yang kembaliannya berupa object Scanner sehingga dapat digunakan untuk melakukan proses input berulang – ulang.

private static Scanner initInput() {
    return new Scanner(System.in);
}

Dilanjutkan dengan membuat return value method yang kembaliannya berupa nilai integer. Method ini digunakan untuk menerima inputan user yang akan menjadi limiter dari deret Fibonacci.

private static int getInput() {
    int alpha = 0;
    boolean inputLoop = true;
    while(inputLoop) {
        try {
            System.out.print("Masukkan panjang deret Fibonacci: ");
            alpha = initInput().nextInt();
            inputLoop = false;
        }
        catch(InputMismatchException e) {
            System.out.println("Masukan harus berupa bilangan bulat! ");
            inputLoop = true;
        }
    }
    return alpha;
}

Pada method di atas, Saya menggunakan try catch untuk menghandle inputan dari user dan menggunakan InputMismatchException untuk menghandle kesalahan input dari User. Saya menginginkan bahwa inputan yang diberikan user adalah bilangan bulat, maka ketika inputan yang diberikan oleh User tidak sesuai dengan format, program akan menampilkan kesalahan dan saran perbaikan yang harus dilakukan oleh user dalam proses Input selanjutnya. Berikut adalah contoh eksekusi blok method ini.

Ketika inputan tidak berupa bilangan bulat, program akan terus menampilkan pesan kesalahan dan terus meminta user untuk memberikan inputan yang benar dan sesuai format.

Berikutnya adalah method inti untuk men-generate deret Fibonacci sesuai dengan limiter yang diberikan oleh user. Oleh karena itu, kita membuat non-return value method dengan satu parameter integer sebagai limiter deret Fibonacci.

private static void generateFibonacci(int limit) {
    long a = 0;
    long b = 1;
    int value = 0;
    while(value < limit) {
        if(value < limit) {
            System.out.print(a + " ");
            a = a + b;
            value ++;
        }
        if(value < limit) {
            System.out.print(b + " ");
            b = b + a;
            value++;
        }
    }
}

Mari kita perhatikan blok method di atas. Pertama, mengapa Saya menggunakan long? dan tidak menggunakan integer?. Sederhana saja. Karena integer kurang panjang. Integer menggunakan 32bit sedangkan Long menggunakan 64bit, sehingga Long dapat menghandle rentang nilai yang lebih panjang. Lebih jelas lagi, integer hanya mampu menghandle bilangan bulat dalam rentang -2.147.483.648 hingga 2.147.483.647, sedangkan long dalam rentang -9.223.372.036.854.775.808 hingga 9.223.372.036.854.775.807. Oleh karenanya, Saya memutuskan untuk menggunakan long, meskipun sebenarnya itu juga belum cukup.

Kedua, mengapa Saya membuat dua variable a dan b dengan nilai masing – masing 0 dan 1? Jika sampai di sini Anda belum mengerti, silakan scroll ke atas kembali untuk lebih memahamkan lagi tentang deret Fibonacci. Yep, deret Fibonacci dimulai dari 0 dan 1 serta anggota – anggota dari deret Fibonacci merupakan penjumlah dari dua anggota deret sebelumnya. Oleh karenanya, secara logika kita memerlukan dua variable yang dapat saling dijumlahkan untuk menghasilkan anggota deret selanjutnya.

Ketiga, saya menggunakan while untuk melakukan pengecekan kondisi apabila panjang deret masih di bawah batas limiter, maka iterasi dapat terus dijalankan hingga panjang deret tepat sama dengan limiter yang ditentukan oleh user. Di dalam iterasi, Saya juga menggunakan dua pengecekan kondisi IF yang berfungsi untuk memeriksa apakah panjang deret masih di bawah limiter yang ditentukan user atau tidak. Apabila masih di bawah limiter, maka anggota deret ditampilkan. Sehingga, untuk memastikan bahwa jumlah deret yang telah tercetak dapat dimonitor dengan baik, maka setiap di akhir IF, saya berikan increment untuk value sebagai indikator bahwa, setiap selesai mencetak anggota deret, maka nilai value akan sama dengan jumlah anggota deret yang telah dicetak. Nilai variable value ini nantinya akan dibandingkan pada proses iterasi while untuk menentukan apakah proses iterasi terus dilanjutkan atau sudah selesai.

Secara mudahnya, alur algoritma pada blok method di atas dapat Anda perhatikan pada tabel berikut ini.

Iterasi ke-limitabvaluewhile value < limit?IF value < limit?printavalueIF value < limit?printbvalue
18010TT011T122
28122TT133T254
38354TT385T5136
488136TT8217T13348
5821348F
Contoh proses algoritma generator deret Fibonacci dengan limiter = 8.
(Keterangan: T = TRUE; F = FALSE)

Mari kita perhatikan di atas, sekarang kita kumpulkan value value pada kolom print. Dari hasil pengumpulan value – value pada kolom print didapatkan hasil berikut ini:

0, 1, 1, 2, 3, 5, 8, 13

Iterasi berhenti pada langkah ke 5 karena saat itu value sudah sama dengan nilai limiter. Sehingga method selesai dieksekusi. Apakah sudah paham sampai pada bagian ini? jika belum paham, silakan Anda dapat meninggalkan pertanyaan pada kolom komentar.

Kita akan melanjutkan ke method selanjutnya, yakni membuat method end() untuk menghandle aksi setelah program selesai men-generate deret Fibonacci. Pada dasarnya, method ini hanya berupa pertanyaan kepada user: Apakah user ingin melanjutkan menggunakan program atau tidak. Jika user memilih “Y” sebagai simbol dari “Yes” maka user akan melanjutkan menggunakan program. Sebaliknya, jika user memilih “N” sebagai simbol dari “No” maka program akan berakhir. Berikut adalah methodnya.

private static boolean end() {
    boolean status = true;
    boolean appStatus = true;
    String alpha = "";
    while(status) {
        System.out.print("Lanjutkan? (Y/N): ");
        alpha = initInput().next();
        if(alpha.equalsIgnoreCase("Y") || alpha.equalsIgnoreCase("N")) {
            status = false;
            if(alpha.equalsIgnoreCase("Y")) appStatus = true;
            else appStatus = false;
        }
        else {
            status = true;
            System.out.println("Masukan yang diterima hanya Y/N!");
        }
    }
    return appStatus;
}

Sama halnya dengan method getInput() sebelumnya, pada method end() ini, juga dilakukan validasi terhadap inputan user agar inputan dari user hanya berupa “Y” atau “N”. Selain itu, method ini merupakan return value method dengan nilai kembalian berupa boolean. Apabila user memilih “Y” maka method akan mengembalikan nilai TRUE, sebaliknya method akan mengembalikan nilai FALSE.

method terakhir yang kita buat adalah method begin(). Fungsi dari method ini hanya untuk menampilkan judul program ini. Berikut adalah contoh methodnya.

private static void begin() {
    System.out.println("Program Deret Fibonacci\nCoded by Muhammad Irfan Luthfi\ngithub.com/milstrike\n");
}

Terakhir, isikan baris kode berikut pada method main()

public static void main(String[] args) {
    boolean appLoop = true;
    begin();
    while(appLoop) {
        generateFibonacci(getInput());
        System.out.println();
        appLoop = end();
    }

}

Mari kita perhatikan kembali method main tersebut. Seperti yang sudah dijelaskan pada method end() sebelumnya, bahwa adanya method end() berfungsi untuk menghandle pilihan dari user untuk melanjutkan atau mengakhiri program. Oleh karenanya, supaya method end() dapat berfungsi dengan semestinya, pada method main kita buat terlebih dahulu iterasi program yang kondisi sangat bergantung pada opsi yang dipilih user pada method end(). Dalam method main tersebut, variable appLoop secara default bernilai TRUE. Selama appLoop bernilai TRUE, maka program akan terus dijalankan. Namun, ketika program mengeksekusi method end() dan diperoleh nilai kembalian FALSE, iterasi program selesai dan program selesai dieksekusi.

Sekarang mari kita lihat RUN dari program ini.

Tangkapan layar ketika program JavaFibonacci dijalankan.

Berikut ini adalah source code lengkap dari program JavaFibonacci.

package javaFibonacci;

import java.util.InputMismatchException;
import java.util.Scanner;

public class JavaFibonacci {
	
	private static Scanner initInput() {
		return new Scanner(System.in);
	}
	
	private static int getInput() {
		int alpha = 0;
		boolean inputLoop = true;
		while(inputLoop) {
			try {
				System.out.print("Masukkan panjang deret Fibonacci: ");
				alpha = initInput().nextInt();
				inputLoop = false;
			}
			catch(InputMismatchException e) {
				System.out.println("Masukan harus berupa bilangan bulat! ");
				inputLoop = true;
			}
		}
		return alpha;
	}
	
	private static void generateFibonacci(int limit) {
		long a = 0;
		long b = 1;
		int value = 0;
		while(value < limit) {
			if(value < limit) {
				System.out.print(a + " ");
				a = a + b;
				value ++;
			}
			if(value < limit) {
				System.out.print(b + " ");
				b = b + a;
				value++;
			}
		}
	}
	
	private static void begin() {
		System.out.println("Program Deret Fibonacci\nCoded by Muhammad Irfan Luthfi\ngithub.com/milstrike\n");
	}
	
	private static boolean end() {
		boolean status = true;
		boolean appStatus = true;
		String alpha = "";
		while(status) {
			System.out.print("Lanjutkan? (Y/N): ");
			alpha = initInput().next();
			if(alpha.equalsIgnoreCase("Y") || alpha.equalsIgnoreCase("N")) {
				status = false;
				if(alpha.equalsIgnoreCase("Y")) appStatus = true;
				else appStatus = false;
			}
			else {
				status = true;
				System.out.println("Masukan yang diterima hanya Y/N!");
			}
		}
		return appStatus;
	}
	
	public static void main(String[] args) {
		boolean appLoop = true;
		begin();
		while(appLoop) {
			generateFibonacci(getInput());
			System.out.println();
			appLoop = end();
		}
		
	}
	
}

Bagaimana, sampai pada bagian akhir ini? Apakah Anda sudah paham dengan proses koding program JavaFibonacci ini? Apabila Anda belum paham, silakan untuk menuliskan pertanyaan yang ingin Anda ajukan terkait dengan program ini pada kolom komentar.

Terakhir, jika Anda ingin mencuplik artikel ini jangan lupa untuk menyertakan URLnya. Link project program ini juga sudah Saya sertakan pada bagian akhir artikel ini.

Terima kasih… ^_^

UNDUH SOURCE CODE

Please follow and like us:
Advertisements

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *