🔭Praktikum 2: Searching

Pengantar

Pada pratikum kali ini, kita akan menggunakan kasus yang serupa dengan praktikum sebelumnya. Terdapat dua class yang dibutuhkan, yaitu Mahasiswa dan PencarianMhs. Class PencarianMhs digunakan untuk mencari mahasiswa yang diinginkan. Perhatikan class diagram berikut ini,

  • Buatlah projek dengan nama "Searching".

  • Buatlah class Mahasiswa seperti berikut.

public class Mahasiswa {
    public int nim;
    public String nama;
    public int umur;
    public double ipk;
    
    Mahasiswa(int ni, String n, int u, double i {
        this.nim = ni;
        this.nama = n;
        this.umur = u;
        this.ipk = i;
    }
    
    public void tampil() {
        System.out.println("Nim = "+nim);
        System.out.println("Nama = "+nama);
        System.out.println("Umur = "+umur);
        System.out.println("IPK = "+ipk);
    }
}
  • Buatlah class PencarianMhs seperti berikut,

public class PencarianMhs {
    Mahasiswa listMhs[] = new Mahasiswa[5];
    int idx;
    
    // method tambah()
    
    // method tampil()
    
    // method findSeqSearch()
    
    // method tampilPosisi()
    
    // method tampilData()
}
  • Buatlah method tambah() didalam class PencarianMhs.

// method tambah()

public void tambah(Mahasiswa m) {
    if(idx<listMhs.length) {
        listMhs[idx] = m;
        idx++;
    } else {
        System.out.println("Data sudah penuh!");
    }
}
  • Tambahkan method tampil() pada class PencarianMhs.

// method tampil()

public void tampil() {
    // fungsi loop for berikut
    // akan melakukan looping
    // sejumlah objek didalam list
    // secara langsung
    for (Mahasiswa m : listMhs) {
        m.tampil()
        System.out.println("----------------------");
    }
}
  • Buatlah method findSeqSearch() yang akan digunakan untuk mencari data menggunakan algoritma sequential searching.

public int findSeqSearch(int cari) {
    int posisi = -1;
    for(int j=0; j < listMhs.length; j++) {
        if(listMhs[j].nim==cari) {
            posisi = j;
        }
    }
    return posisi;
}
  • Selanjutnya buatlah method tampilPosisi().

public void tampilPosisi(int x, int pos) {
    if(pos!=-1) {
        System.out.println("data : "+ x +"ditemukan pada indeks " + pos);
    } else {
        System.out.println("data : "+ x +"tidak ditemukan");
    }
}
  • Lanjutkan dengan membuat method tampilData().

public void tampilData(int x, int pos) {
    if(pos!=-1) {
        System.out.println("Nim\t : " + x);
        System.out.println("Nama\t : " + listMhs[pos].nama);
        System.out.println("Umur\t : " + listMhs[pos].umur);
        System.out.println("IPK\t : " + listMhs[pos].ipk);
    } else {
        System.out.println("data : "+ x +"tidak ditemukan");
    }
}
  • Terakhir, buatlah sebuah main class untuk melakukan pengujian terhadap metode pencarian yang telah dibuat.

public class MahasiswaMain {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in); // pastikan import package scanner
        Scanner sl = new Scanner(System.in);
        
        PencarianMhs data = new PencarianMhs();
        int jumMhs = 5;
        
        System.out.println("-----------------------------------");
        System.out.println("Masukkan data mahasiswa secara urut dari Nim Tekecil");
        for(int i=0; i < jumMhs; i++) {
            System.out.println("----------------");
            System.out.print("Nim\t: ");
            int nim = s.nextInt();
            System.out.print("Nama\: ");
            String nama = sl.nextLine();
            System.out.print("Umur\t : ");
            int umur = s.nextInt();
            System.out.print("IPK\t : ");
            double ipk = s.nextDouble();
            
            Mahasiswa m = new Mahasiswa(nim, nama, umur, ipk);
            data.tambah(m);
            
        System.out.println("-----------------------------------");
        System.out.println("Data keseluruhan Mahasiswa");
        data.tampil();
        
        // Proses pencarian data
        System.out.println("___________________________________");
        System.out.println("Pencarian Data : ");
        System.out.println("Masukkan Nim Mahasiswa yang dicari: ");
        Sytem.out.print("NIM: ");
        int cari = s.nextInt();
        System.out.println("menggunakan sequential Search");
        int posisi = data.findSeqSearch(cari);
        
        // Tampilkan posisi data
        data.tampilPosisi(cari, posisi);
        
        // Tampilkan data hasil pencarian
        data.tampilData(cari, posisi);
        }
    }
}
  • Verifikasi proses input data hasil tampil keseluruhan data

  • Verifikasi Hasil Pencarian Data

Pada praktikum ini, kita perlu membuat method baru untuk melakukan pencarian dengan algoritma binary search.

  • Buatlah method baru, yaitu findBinarySearch() pada class PencarianMhs.

public int findBinarySearch(int cari, int left, int right) {
    // method ini berlaku untuk sorting ascending
    int mid;
    if(right >= left) {
        mid = (left + right) / 2;
        if(cari == listMhs[mid].nim) {
            return mid;
        } else if(listMhs[mid].nim > cari) {
            return findBinarySearch(cari, left, mid - 1); // rekursif
        } else {
            return findBinarySearch(cari, mid + 1, right); // rekursif
        }
    }
    return -1;
}
  • Tambahkan kode berikut pada main class untuk pengecekan method findBinarySearch().

System.out.println("====================================");
System.out.println("menggunakan binary Search");
int posisi = data.findBinarySearch(cari, 0, jumMhs -1);

// Tampilkan posisi data
data.tampilPosisi(cari, posisi);

// Tampilkan data hasil pencarian
data.tampilData(cari, posisi);
  • Verifikasi hasil pencarian

Last updated