> For the complete documentation index, see [llms.txt](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/job-sheet-4-sorting-dan-searching/praktikum-2-searching.md).

# 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,

<figure><img src="/files/ghf7QL9tP75iN0DmzfiH" alt=""><figcaption><p>Gambar 4.2.1. Class Diagram Mahasiswa</p></figcaption></figure>

<figure><img src="/files/H1YfZTnHZz9MKgvutjTJ" alt=""><figcaption><p>Gambar 4.2.2 Class Diagram PencarianMhs</p></figcaption></figure>

## Searching dengan Sequential Search

* Buatlah projek dengan nama "**`Searching`**".
* Buatlah class `Mahasiswa` seperti berikut.

```java
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,

```java
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`.

```java
// 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`.

```java
// 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.

```java
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()`.

```java
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()`.

```java
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.

```java
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

![](/files/eaZEojh5elYEoMsJU6xv)

* Verifikasi Hasil Pencarian Data

![](/files/tAXanfNgsdihGIdfmBGB)

## Searching dengan Binary Search

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

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

```java
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()`.

```java
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

![](/files/aMeDeiDaDu9Ya0BZeaX4)
