Senin, 12 Desember 2011

Contoh Subrutin - Mengubah Program RataRata


Kita mulai dengan program RataRata yang kita bahasa pada bagian tentang while dan do ... while.
Perhatikan bahwa di dalam program tersebut kita harus menulis berulang-ulang untuk mendapatkan input data dari user. Sekarang kita akan pisahkan kode untuk mengambil input dari user dalam kelas yang dinamakan KonsolInput.
Pertama-tama buat project baru di Eclipse yang dinamakan RataRata2. Caranya "File -> New -> Java Project" kemudian masukkan RataRata2.
Kemudian buat kelas baru yang dinamakan KonsolInput. "File -> New -> Class", masukkan package ratarata2 dan Name KonsolInput seperti gambar berikut :
Kita akan membuat subrutin statik yang dinamakan ambilDouble() yang tugasnya memberi pertanyaan kepada user, mengambil input dari user dan mengubah input dari user menjadi bilangan real (tipe data double).
Kita bisa definisikan subrutin ini dengan
public static double ambilDouble(String pertanyaan) { ... }
"public" dan "static" adalah sifat subrutin ini, "double" merupakan tipe data keluarannya karena kita ingin subrutin ini mengembalikan input bertipe double sehingga siap untuk digunakan. "ambilDouble" adalah nama subrutin ini, dan "String pertanyaan" adalah parameternya yaitu berupa pertanyaan yang diberikan kepada user pada saat data akan diambil.
Apa yang harus dilakukan sekarang? Kita ambil perintah untuk mengambil data dari RataRata yaitu :
        double bilangan = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String strbilangan = null;
 
        System.out.print("Masukkan bilangan pertama : ");
        try {
            strbilangan = br.readLine();
        } catch (IOException ioe) {
            System.out.println("Kesalahan IO, program berhenti");
            System.exit(1);
        }
 
        // mengubah input menjadi double agar bisa diproses lebih lanjut
        bilangan = Double.parseDouble(strbilangan);
Ingat bahwa parameter "String pertanyaan" adalah pertanyaan yang akan kita ajukan kepada user, sehingga baris
        System.out.print("Masukkan bilangan pertama : ");
kita ganti dengan
        System.out.print(pertanyaan);
Kita akan kembalikan "bilangan" kepada si pemanggil, sehingga di akhir subrutin kita beri perintah
        return bilangan;
yang berarti kembalikan bilangan kepada si pemanggil fungsi ini.
Jangan lupa juga untuk menambahkan import java.io.*; di awal kelas karena BufferedReader adalah anggota dari paket ini. Sekarang subrutin ambilDouble() menjadi seperti ini
package ratarata2;
 
import java.io.*;
 
public class KonsolInput {
 
    public static double ambilDouble(String pertanyaan) {
        String strbilangan = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        double bilangan;
 
        System.out.print(pertanyaan);
        try {
            strbilangan = br.readLine();
        } catch (IOException ioe) {
            System.out.println("Kesalahan IO, program berhenti");
            System.exit(1);
        }
 
        bilangan = Double.parseDouble(strbilangan);
        return bilangan;
    }
 
}
Kemudian kita buat kelas baru yang dinamakan RataRata2, seperti pada gambar berikut :
Dengan menggunakan subrutin yang baru kita buat, kita modifikasi program RataRata menjadi RataRata2 sebagai berikut :
package ratarata2;
 
public class RataRata2 {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double jumlah = 0;
        double bilangan = 0;
        int n = 0;
 
        bilangan = KonsolInput.ambilDouble("Masukkan bilangan pertama : ");
 
        while (bilangan != 0) {
            jumlah += bilangan;     // sama dengan : jumlah = jumlah + bilangan
            n++;                    // sama dengan : n = n+1
 
            bilangan = KonsolInput.ambilDouble("Masukkan bilangan berikutnya (atau 0 untuk mengakhiri) : ");
        }
 
        // hitung rata-rata
        double ratarata = jumlah/n;
 
        // cetak hasilnya ke layar
        if (n == 0) {
            System.out.println("Data kosong, rata-rata tidak bisa dihitung");   
        } else {
            System.out.println("Anda memasukkan " + n + " data");
            System.out.println("Rata-rata bilangan yang dimasukkan adalah " + ratarata);    
        }
    }
}
Perhatikan beberapa perubahan di dalam program ini. Pertama, kita hapus perintah-perintah untuk mengambil input dari user karena sudah kita implementasikan pada subrutin ambilDouble() di kelas KonsolInput.
Di kelas RataRata2, kita panggil subrutin ambilDouble() dengan perintah
        bilangan = KonsolInput.ambilDouble("Masukkan bilangan pertama : ");
dan
        bilangan = KonsolInput.ambilDouble("Masukkan bilangan berikutnya (atau 0 untuk mengakhiri) : ");
di mana parameternya adalah pertanyaan yang diberikan kepada user sebelum memasukkan data.
Hasil keluarannya sama dengan pada kelas RataRata

Tidak ada komentar:

Posting Komentar