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;
}
}