Menu
CoddyTech

Enum dan method Enum

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 50 dari 87.

enum (enumerasi) adalah tipe class khusus yang mewakili sekumpulan konstanta tetap. Alih-alih menggunakan bilangan bulat atau string sembarang untuk mewakili opsi seperti hari dalam seminggu atau status pesanan, enum menyediakan nilai yang aman dari segi tipe dan mudah dibaca.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Mencetak: MONDAY

Enum bukan sekadar konstanta: enum adalah class lengkap. Kamu bisa menambahkan field, constructor, dan method ke dalamnya:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Mencetak: 20

Setiap enum memiliki method bawaan yang berguna. Method values() mengembalikan array berisi semua konstanta, sedangkan valueOf() mengonversi string menjadi konstanta enum yang cocok. Method ordinal() mengembalikan posisi konstanta (dimulai dari 0):

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // Mengubah string menjadi enum

Enum ideal digunakan saat kamu memiliki sekumpulan nilai yang sudah diketahui dan tetap, yang tidak akan berubah saat program berjalan, sehingga kodemu lebih aman dan lebih ekspresif daripada menggunakan konstanta biasa.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pemesanan kedai kopi yang menunjukkan keunggulan enum dengan field, constructor, dan method. Kamu akan membuat enum CoffeeSize yang menyimpan informasi harga dan sistem untuk memproses pesanan pelanggan.

Kamu akan mengatur kodemu dalam tiga file:

  • CoffeeSize.java: Buat enum yang mewakili ukuran kopi beserta harganya. Enum-mu harus memiliki tiga konstanta: SMALL, MEDIUM, dan LARGE, dengan harga masing-masing 2.50, 3.50, dan 4.50.

    Setiap ukuran memerlukan field price private (double), constructor untuk menetapkan nilainya, dan method getPrice() untuk mengambil nilainya. Tambahkan juga method getDescription() yang mengembalikan string dengan format: [size name] - $[price] (contohnya: SMALL - $2.5)

  • Order.java: Buat class yang mewakili pesanan kopi. Order memiliki dua field private: customerName (String) dan size (CoffeeSize). Sertakan constructor untuk menginisialisasi kedua field tersebut dan getter untuk masing-masing field.

    Tambahkan method getReceipt() yang mengembalikan string beberapa baris:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Hidupkan kedai kopimu! Kamu akan menerima dua input: nama pelanggan (String) dan nama ukuran (String seperti "SMALL", "MEDIUM", atau "LARGE").

    Pertama, gunakan CoffeeSize.valueOf() untuk mengubah string ukuran menjadi konstanta enum yang sesuai. Buat Order dengan nama pelanggan dan ukuran tersebut, lalu cetak struknya.

    Setelah mencetak struk, cetak satu baris kosong, lalu tampilkan seluruh menu dengan melakukan iterasi melalui semua nilai CoffeeSize menggunakan method values(). Untuk setiap ukuran, cetak deskripsinya pada baris terpisah.

Kamu akan menerima dua input secara berurutan: nama pelanggan dan nama ukuran (salah satu dari "SMALL", "MEDIUM", atau "LARGE").

Perhatikan bagaimana enum mencakup identitas ukuran dan harga yang terkait dengannya, jauh lebih rapi daripada menggunakan konstanta terpisah atau angka ajaib di seluruh kodemu!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Ubah sizeName menjadi enum CoffeeSize menggunakan valueOf()
        
        // TODO: Buat Order dengan nama pelanggan dan ukuran
        
        // TODO: Cetak struk
        
        // TODO: Cetak baris kosong
        
        // TODO: Tampilkan menu lengkap dengan mengiterasi semua nilai CoffeeSize
        // Petunjuk: Gunakan CoffeeSize.values() untuk mendapatkan semua konstanta enum
        
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online