Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Java Dasar: Membaca dan Memperbaiki Kode

Pelajaran 16 dari 16

Objek, interface, dan exception

Misi: membaca pemroses pesanan grosir

Setelah pelajaran ini kamu bisa menelusuri program utuh yang memakai interface, ArrayList, dan try/catch dengan throw sampai keluarannya.

±16 menitDiperiksa 5 Okt 2026

Materi

Admin sebuah grosir di Makassar menerima baris pesanan berbentuk KODE;JUMLAH. Program berikut memecah setiap baris, menolak jumlah yang bukan angka atau tidak positif, lalu menghitung potongan dengan dua aturan diskon yang mengimplementasikan interface yang sama. Keempat soal memakai program yang sama.

import java.util.ArrayList;
import java.util.List;

public class Pesanan {
    public static void main(String[] args) {
        List<String> baris = List.of("BRS;2", "MNY;x", "GLA;3", "KPI;-1");
        List<Diskon> aturan = new ArrayList<>();
        aturan.add(new TanpaDiskon());
        aturan.add(new DiskonGrosir());

        int diterima = 0;
        for (String b : baris) {
            String[] bagian = b.split(";");
            try {
                int jumlah = Integer.parseInt(bagian[1]);
                if (jumlah <= 0) {
                    throw new IllegalArgumentException("jumlah harus positif");
                }
                diterima++;
                System.out.println(bagian[0] + " " + jumlah);
            } catch (NumberFormatException e) {
                System.out.println(bagian[0] + " ditolak: bukan angka");
            } catch (IllegalArgumentException e) {
                System.out.println(bagian[0] + " ditolak: " + e.getMessage());
            }
        }

        for (Diskon d : aturan) {
            System.out.println(d.potongan(diterima * 100000));
        }
    }
}

interface Diskon {
    int potongan(int total);
}

class TanpaDiskon implements Diskon {
    public int potongan(int total) {
        return 0;
    }
}

class DiskonGrosir implements Diskon {
    public int potongan(int total) {
        return total >= 500000 ? total / 10 : 0;
    }
}

Latihan

0/4 lulus

Misi akhir modul: luluskan minimal 4 dari 4 tugas. Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 4

Apa yang dicetak untuk baris pesanan MNY;x?

import java.util.ArrayList;
import java.util.List;

public class Pesanan {
    public static void main(String[] args) {
        List<String> baris = List.of("BRS;2", "MNY;x", "GLA;3", "KPI;-1");
        List<Diskon> aturan = new ArrayList<>();
        aturan.add(new TanpaDiskon());
        aturan.add(new DiskonGrosir());

        int diterima = 0;
        for (String b : baris) {
            String[] bagian = b.split(";");
            try {
                int jumlah = Integer.parseInt(bagian[1]);
                if (jumlah <= 0) {
                    throw new IllegalArgumentException("jumlah harus positif");
                }
                diterima++;
                System.out.println(bagian[0] + " " + jumlah);
            } catch (NumberFormatException e) {
                System.out.println(bagian[0] + " ditolak: bukan angka");
            } catch (IllegalArgumentException e) {
                System.out.println(bagian[0] + " ditolak: " + e.getMessage());
            }
        }

        for (Diskon d : aturan) {
            System.out.println(d.potongan(diterima * 100000));
        }
    }
}

interface Diskon {
    int potongan(int total);
}

class TanpaDiskon implements Diskon {
    public int potongan(int total) {
        return 0;
    }
}

class DiskonGrosir implements Diskon {
    public int potongan(int total) {
        return total >= 500000 ? total / 10 : 0;
    }
}
Pilih satu jawaban

Latihan 2 dari 4

Apa yang dicetak untuk baris pesanan KPI;-1?

import java.util.ArrayList;
import java.util.List;

public class Pesanan {
    public static void main(String[] args) {
        List<String> baris = List.of("BRS;2", "MNY;x", "GLA;3", "KPI;-1");
        List<Diskon> aturan = new ArrayList<>();
        aturan.add(new TanpaDiskon());
        aturan.add(new DiskonGrosir());

        int diterima = 0;
        for (String b : baris) {
            String[] bagian = b.split(";");
            try {
                int jumlah = Integer.parseInt(bagian[1]);
                if (jumlah <= 0) {
                    throw new IllegalArgumentException("jumlah harus positif");
                }
                diterima++;
                System.out.println(bagian[0] + " " + jumlah);
            } catch (NumberFormatException e) {
                System.out.println(bagian[0] + " ditolak: bukan angka");
            } catch (IllegalArgumentException e) {
                System.out.println(bagian[0] + " ditolak: " + e.getMessage());
            }
        }

        for (Diskon d : aturan) {
            System.out.println(d.potongan(diterima * 100000));
        }
    }
}

interface Diskon {
    int potongan(int total);
}

class TanpaDiskon implements Diskon {
    public int potongan(int total) {
        return 0;
    }
}

class DiskonGrosir implements Diskon {
    public int potongan(int total) {
        return total >= 500000 ? total / 10 : 0;
    }
}
Pilih satu jawaban

Latihan 3 dari 4

Apa dua baris terakhir keluaran? Tanda | di pilihan memisahkan baris keluaran.

import java.util.ArrayList;
import java.util.List;

public class Pesanan {
    public static void main(String[] args) {
        List<String> baris = List.of("BRS;2", "MNY;x", "GLA;3", "KPI;-1");
        List<Diskon> aturan = new ArrayList<>();
        aturan.add(new TanpaDiskon());
        aturan.add(new DiskonGrosir());

        int diterima = 0;
        for (String b : baris) {
            String[] bagian = b.split(";");
            try {
                int jumlah = Integer.parseInt(bagian[1]);
                if (jumlah <= 0) {
                    throw new IllegalArgumentException("jumlah harus positif");
                }
                diterima++;
                System.out.println(bagian[0] + " " + jumlah);
            } catch (NumberFormatException e) {
                System.out.println(bagian[0] + " ditolak: bukan angka");
            } catch (IllegalArgumentException e) {
                System.out.println(bagian[0] + " ditolak: " + e.getMessage());
            }
        }

        for (Diskon d : aturan) {
            System.out.println(d.potongan(diterima * 100000));
        }
    }
}

interface Diskon {
    int potongan(int total);
}

class TanpaDiskon implements Diskon {
    public int potongan(int total) {
        return 0;
    }
}

class DiskonGrosir implements Diskon {
    public int potongan(int total) {
        return total >= 500000 ? total / 10 : 0;
    }
}
Pilih satu jawaban

Latihan 4 dari 4

Bila kedua catch dibalik urutannya sehingga catch (IllegalArgumentException e) ditulis lebih dulu, apa yang terjadi?

import java.util.ArrayList;
import java.util.List;

public class Pesanan {
    public static void main(String[] args) {
        List<String> baris = List.of("BRS;2", "MNY;x", "GLA;3", "KPI;-1");
        List<Diskon> aturan = new ArrayList<>();
        aturan.add(new TanpaDiskon());
        aturan.add(new DiskonGrosir());

        int diterima = 0;
        for (String b : baris) {
            String[] bagian = b.split(";");
            try {
                int jumlah = Integer.parseInt(bagian[1]);
                if (jumlah <= 0) {
                    throw new IllegalArgumentException("jumlah harus positif");
                }
                diterima++;
                System.out.println(bagian[0] + " " + jumlah);
            } catch (NumberFormatException e) {
                System.out.println(bagian[0] + " ditolak: bukan angka");
            } catch (IllegalArgumentException e) {
                System.out.println(bagian[0] + " ditolak: " + e.getMessage());
            }
        }

        for (Diskon d : aturan) {
            System.out.println(d.potongan(diterima * 100000));
        }
    }
}

interface Diskon {
    int potongan(int total);
}

class TanpaDiskon implements Diskon {
    public int potongan(int total) {
        return 0;
    }
}

class DiskonGrosir implements Diskon {
    public int potongan(int total) {
        return total >= 500000 ? total / 10 : 0;
    }
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Sebagian materi kelas ini diadaptasi dari Exercism — jalur Java (concept exercises) (MIT).