Jumat, 07 September 2012

Konversi Bilangan Menggunakan JOPtionPane

Ya ketemu lagi disini , kali ini saya akan membahas lagi yang namanya konversi bilangan di JAVA , tapi yang ini berbeda .
Nanti saat program dijalankan maka kita harus mengisikan nama , memilih gender , dan memilih menu dimana terdapat 7 menu yaitu Biner, Hexa, Oktal , Terbilang, Pecahan , Kembali , dan keluar

Berikut langkah-langkahnya :


1. Buat NetBeans , New Java Class , beri nama menuDariJOPtion.java
2. kemudian ketikkan code berikut , letakkan dibawah packages :

package Praktek1;
import javax.swing.JOptionPane;

3.Kemudian deklarasikan variable yang akan digunakan di bawah class :
public class MenuDariJOption {
    private static String name;
    private static String des;
    private static String gender;
    private static String kelamin;
    private static int validDes;
    static StringBuilder binerHasil = new StringBuilder();
    static StringBuilder hexaHasil = new StringBuilder();
    static StringBuilder oktalHasil = new StringBuilder();
    static String sc;

4. Kemudian ketikkan coding berikut untuk menampilkan proses konversi bilangan ke biner , hexa , dan oktal :
public static void keBiner(int n){
    if(n>1){
        keBiner(n/2);
        System.out.print(n%2);
        binerHasil.append(n%2);
        
    }
    }
    public static void keHexa(int n){
    char[] daftarHexa={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        if(n>0){
            keHexa(n/16);
            System.out.print(daftarHexa[n%16]);
        hexaHasil.append(daftarHexa[n%16]);
     
        }
    }
    public static void keOktal(int n){
    char[] daftarOktal={'0','1','2','3','4','5','6','7','8'};
        if(n>0){
            keHexa(n/8);
            System.out.print(daftarOktal[n%8]);
            oktalHasil.append(daftarOktal[n%8]);
        }
    }

5. kemudian tuliskan coding berikut untuk menginputkan bilangan decimal :
public static void inputDesJOption(){
    des=JOptionPane.showInputDialog("Masukkan " + "Bil.Desimalnya = ");
    try{
        if(des.isEmpty()){
            JOptionPane.showMessageDialog(null, "Inputan angka tidak boleh kosong!!");
            inputDesJOption();//kembali input angka
        }
    }catch(NullPointerException npe){
        JOptionPane.showMessageDialog(null, "Harap diisi Angka dulu donk!!");
        inputDesJOption();//kembali input angka
    }
    }

6. dan tuliskan coding berikut untuk menampilkan hasil konversi bilangan :


 public static void eksepsiInpBiner(){
    inputDesJOption();
    try {
        validDes=Integer.parseInt(des);
        keBiner(validDes);
        JOptionPane.showMessageDialog(null, "Bilangan desimal : "+des+" dikonversikan dalam Biner hasilnya : "+binerHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE );
        binerHasil = new StringBuilder();
        
    }catch(NumberFormatException nfe){
        JOptionPane.showMessageDialog(null, des+" bukan angka!! "+ "\nMasukkan angka saja!!");
        eksepsiInpBiner();
    }
    }
    public static void eksepsiInpHexa(){
    inputDesJOption();
    try {
        validDes=Integer.parseInt(des);
        keHexa(validDes);
        JOptionPane.showMessageDialog(null, "Bilangan desimal : "+des+" dikonversikan dalam Biner hasilnya : "+hexaHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE );
        hexaHasil = new StringBuilder();
        
    }catch(NumberFormatException nfe){
        JOptionPane.showMessageDialog(null, des+" bukan angka!! "+ "\nMasukkan angka saja!!");
        eksepsiInpHexa();
    }
    }
    public static void eksepsiInpOktal(){
    inputDesJOption();
    try {
        validDes=Integer.parseInt(des);
        keOktal(validDes);
        JOptionPane.showMessageDialog(null, "Bilangan desimal : "+des+" dikonversikan dalam Biner hasilnya : "+oktalHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE );
        oktalHasil = new StringBuilder();
    }catch(NumberFormatException nfe){
        JOptionPane.showMessageDialog(null, des+" bukan angka!! "+ "\nMasukkan angka saja!!");
        eksepsiInpOktal();
    }
    }
    
    public static void outHasilBiner(){
    eksepsiInpBiner();
    }
     public static void outHasilHexa(){
    eksepsiInpHexa();
    }
     public static void outHasilOktal(){
    eksepsiInpOktal();
    }

7.kemudian untuk menampilkan input dialog nama dan gender :
public static void inpNama(){
    name=JOptionPane.showInputDialog("Masukkan Nama Anda :");
    try{
        if(name.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nama tidak boleh kosong!!");
            inpNama();//kembali input nama
        }
    }catch(NullPointerException npe){
        JOptionPane.showMessageDialog(null, "Harap diisi Nama dulu donk!!");
        inpNama();//kembali input nama
    }
    }
    //menampilkan input dialog jenis Kelamin (gender)
    public static void jenisKelamin(){
        gender=JOptionPane.showInputDialog("Masukkan Jenis Kelamin Anda (laki-laki/perempuan) : ");
        try{
            if(gender.isEmpty()){
                JOptionPane.showMessageDialog(null, "Harus diisi lho yaa .... Jenis Kelamin ???");
                jenisKelamin();
            }
        }
        catch(NullPointerException npt){
            JOptionPane.showMessageDialog(null, "Apa jenis kelamin kamu ???");
            jenisKelamin();
        }
        if ("laki-laki".equals(gender)) {
            kelamin="Saudara, ";
        }
        else{
            if("perempuan".equals(gender)){
                kelamin="Saudari, ";
            }
            else{
                JOptionPane.showMessageDialog(null, "Hanya bisa diisi laki-laki dan perempuan saja !!");
                jenisKelamin();
            }
        }
    }

8.dan ini untuk menampilkan Terbilang dan Pecahan :

//Terbilang
    String[] angka = {"", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"};

    private String sebut(int x) {
        String bilang = "";
        int y = x / 100;
        if (y > 0) {
            bilang = angka[y] + " Ratus ";
            if (y == 1) {
                bilang = "Seratus ";
            }
            x %= 100;
        }
        if (x < 12) {
            bilang += angka[x];
        } else {
            y = x / 10;
            x %= 10;
            if (y == 1) {
                bilang += angka[x] + " Belas";
            } else {
                bilang += angka[y] + " Puluh " + angka[x];
            }
        }
        return bilang;
    }

    private String terbilang(long x) {
        int y;
        String bilang = "";
        String[] satuan = {"", " Ribu ", " Juta ", " Milyar ", " Trilyun ", " Quadrilyun ", " Quintilyun "};
        if (x > Math.pow(10, 20)) {
            return "Bilangan terlalu besar";
        }
        for (int i = 6; i > 0; i--) {
            y = (int) (x / Math.pow(10, i * 3));
            if (y > 0) {
                if (y == 1 && i == 1) {
                    bilang += " Seribu ";
                } else {
                    bilang += sebut(y) + satuan[i];
                }
            }
            x %= Math.pow(10, i * 3);
        }
        bilang += sebut((int) x);
        return bilang;
    }

    public static void outTerbilang() {
        sc = JOptionPane.showInputDialog("Masukan Bilangan yang akan disebut : ");
        try {
            if (sc.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Waa.. mana bilangannya ?? Isi dulu yaa.. !!");
                outTerbilang();
            } else {

                JOptionPane.showMessageDialog(null, new MenuDariJOption().terbilang(new Long(sc)), "TERBILANG", JOptionPane.INFORMATION_MESSAGE);
            }
        } catch (NullPointerException not) {
            JOptionPane.showMessageDialog(null, "Jangan keluar dulu, harus diisi dulu.. !!");
            outTerbilang();
        } catch (NumberFormatException nae) {
            JOptionPane.showMessageDialog(null, "Hey '" + sc + "'"
                    + " .... bukan angka !!"
                    + "\nMasukkan angka saja !!");
            outTerbilang();
        }
    }
          
    public static void hasilPecahan() {
        int desimal;

        String str = JOptionPane.showInputDialog("Masukkan bilangan yang akan dipecah : ");
        try {
            if (str.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Kok kosong ?? Isi dulu ya.. !!");
                hasilPecahan();
            } else {

                desimal = Integer.parseInt(str);

                int satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, sepuluh, sebelas, duabelas, tigabelas;
                satu = desimal / 100000;
                desimal %= 100000;

                dua = desimal / 50000;
                desimal %= 50000;

                tiga = desimal / 20000;
                desimal %= 20000;

                empat = desimal / 10000;
                desimal %= 10000;

                lima = desimal / 5000;
                desimal %= 5000;

                enam = desimal / 2000;
                desimal %= 2000;

                tujuh = desimal / 1000;
                desimal %= 1000;

                delapan = desimal / 500;
                desimal %= 500;

                sembilan = desimal / 200;
                desimal %= 200;

                sepuluh = desimal / 100;
                desimal %= 100;

                sebelas = desimal / 50;
                desimal %= 50;

                duabelas = desimal / 10;
                desimal %= 10;

                tigabelas = desimal / 1;
                desimal %= 1;


                JOptionPane.showMessageDialog(null, "Jumlah seratus ribuan = " + satu
                        + "\nJumlah lima puluh ribuan = " + dua
                        + "\nJumlah dua puluh ribuan = " + tiga
                        + "\nJumlah sepuluh ribuan = " + empat
                        + "\nJumlah lima ribuan = " + lima
                        + "\nJumlah dua ribuan = " + enam
                        + "\nJumlah seribuan = " + tujuh
                        + "\nJumlah lima ratusan = " + delapan
                        + "\nJumlah dua ratusan = " + sembilan
                        + "\nJumlah seratusan = " + sepuluh
                        + "\nJumlah lima puluhan = " + sebelas
                        + "\nJumlah lima satuan = " + duabelas
                        + "\nJumlah satuan = " + tigabelas, "PECAHAN", JOptionPane.INFORMATION_MESSAGE);
            }
        } catch (NullPointerException not) {
            JOptionPane.showMessageDialog(null, "Eitss mau kemana ?? Isi dulu bilangannya.. !!");
            hasilPecahan();
        } catch (NumberFormatException nae) {
            JOptionPane.showMessageDialog(null, "Hey '" + str + "'"
                    + " .... bukan angka !!"
                    + "\nMasukkan angka saja !!");
            hasilPecahan();
        }
    }

9.dan ini untuk proses kembali ke awal menginputkan nama :
public static void kembaliMenu(){
        inpNama();
        jenisKelamin();
    }

10.dan ini untuk proses end atau exit :

public static void thanks(){
        JOptionPane.showMessageDialog(
                               null                       
                             , "Terima Kasih "+kelamin+name+" !"
                                + " sudah mau mampir di program konversi bilangan saya :)"
                             , "Thank you"                
                             , JOptionPane.PLAIN_MESSAGE 
                             , null                              
                           ); 
    }

11. coding untuk menampilkan pilihan menu :
public static void menuJOption(){
        inpNama();
        jenisKelamin();
        String[] pilihan = {"BINER", "HEXA", "OKTAL", "TERBILANG", "PECAHAN", "KEMBALI", "KELUAR"};
        while (true) {
            int response = JOptionPane.showOptionDialog(
                               null                       
                             , "Selamat Datang "+kelamin+name+" !!"
                                + "\nPilih Konversi Bilangan dibawah ini?"// Pesan
                             , "Konversi Bilangan"               // Judul di Tittlebar
                             , JOptionPane.YES_NO_OPTION  // Tipe Option
                             , JOptionPane.PLAIN_MESSAGE  // Tipe Pesan
                             , null                       
                             , pilihan     
                             , null    // Default button
                           );
            switch(response){
                case 0:
                    outHasilBiner();
                    break;
                case 1:
                    outHasilHexa();
                    break;
                case 2:
                    outHasilOktal();
                    break;
                case 3:
                    outTerbilang();
                    break;
                case 4:
                    hasilPecahan();
                    break;
                case 5:
                    kembaliMenu();
                    break;
                case 6:
                case -1:
                    thanks();
                default:
                System.exit(0);
            }
        }
    }

12. ini untuk menampilkan hasil dari coding keseluruhan :
public static void main (String[] args){
    menuJOption();
    }
}


Coding ini sebagian saya ambil dari referensi internet beserta hasil sharing dengan teman , apabila anda ingin mencoba tapi pada saat dicoba masih ada kesalahan , dimohon untuk saling share mana yang salah dan perbaikannya seperti apa , oke sekian dulu terimakasih :)

dan dalam program ini , tampilan untuk menampilkan proses konversi ada yang menggunkanan message dialog dan satunya di console , tunggu perkembangan selanjutnya saja :)


ini dia tampilan testing programnya :

ini tampilan awal ketika program dijalankan , kita harus menginputkan nama terlebih dahulu

ini tampilan apabila kita tidak menginputkan nama tapi langsung di klik ok

ini tampilan apabila kita tidak menginputkan nama tapi langsung di klik cancel



baru setelah kita menginputkan nama , maka akan muncul input dialog untuk menginputkan jenis kelamin

ini kotak dialog yang muncul akibat kita langsung mengklik ok tanpa harus menginputkan jenis kelamin terlebih dahulu
ini kotak dialog yang muncul akibat kita langsung mengklik cancel tanpa harus menginputkan jenis kelamin terlebih dahulu


ini kotak dialog yang muncul akibat kita menginputkan jenis kelamin yang bukan laki-laki/perempuan



ini pilihan menu setelah kita menginputkan nama


 ini input dialog untuk memasukkan bilangan desimal yang kita inginkan untuk dikonversikan
ini kotak dialog yang tampil ketika kita mengklik ok namun belum menginputkan bilangan desimal


ini bila kita menginputkan selain angka

ini jika kita mencancel sebelum kita menginputkan angka


 ini hasil konversi ke biner
  ini hasil konversi ke hexa
 ini hasil konversi ke otal


ini merupakan proses menampilkan inputan yang terbilang


ini merupakan proses menampilkan inputan menjadi pecahan


dan apabila kita mengklik menu kembali maka kita akan kembali dimana muncul tampilan input dialog nama

 dan ini kotak dialog yang tampil pada saat kita memilih menu keluar


0 komentar:

Posting Komentar

 

Deryan E.M. Copyright © 2011 | Template design by O Pregador | Powered by Blogger Templates