Isnin, 6 April 2009

Guna Bit ngan Bitwise Operator

Hi, Bertemu lagi dalam rancangan, mari belajar programming. Ok, aku nak bagi satu common stuation la kat korang. Kata la korang ada satu apps ni yg nak store kalau user tu click hari ke apa2 la. Dan menda ni korang nak simpan la dalam database. So korang nak buat mcm mana? Ada byk cara nak buat. Sure korang lagi expert la nak buat mcm mana kan. Tapi aku nak introduce satu menda kat korang la. Bg yg dah tahu tu, sila la bg penerangan kat bawah ni.


Req :
- User leh save hari yg dia pilih untuk dijadikan hari istimewa. Hari2 tu adalah dari Ahad hingga la sabtu. Kira satu minggu la. So user tu, eh pilih hari pabaret sama ada Isnin atau Selasa atau Isnin dan Selasa atau apa2 gabungan hari la.
- Hari2 yg dipilih ni mestilah dapat di save dalam database. Tak kira la database apa korang nak pakai.
- Dalam pada itu, hari2 yg dipilih boleh dipaparkan semula.

Solution aku nak share la:
  • Aku nak pakai bitmap untuk represent hari2 tu.
  • So, tiap kali di pilih tarikh aku akan add dalam bitmap tu.
  • Then nilai akhir bitmap aku simpan dalam database. Kira integer so kecik je la.
Memandang kan menda nak aku cerita ni konsep je, so aku code kan guna java biasa je la. Pandai2 la korang nak memahamkan dan mengubah code tu.

public class YaminBelajar {

    public static final int SUNDAY = 0x0001;    //1
    public static final int MONDAY = 0x0002;    //2
    public static final int TUESDAY = 0x0004;   //4
    public static final int WEDNESDAY = 0x0010; //16
    public static final int THURSDAY = 0x0020;  //32
    public static final int FRIDAY = 0x0040;    //64
    public static final int SATURDAY = 0x0080;  //128

    int dayOfWeek = 0;


    public static final String[] days = {"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};

    public static void main(String args[]){
        YaminBelajar yb = new YaminBelajar();
        System.out.println(" & AND operator");
        System.out.println("Days = " + yb.addDays(days));
        yb.viewDays();
    }

    public int addDays(String[] days){

        for(String day : days){
            if(day.equals("SUNDAY")){
                dayOfWeek = SUNDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("MONDAY")){
                dayOfWeek = dayOfWeek | MONDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("TUESDAY")){
                dayOfWeek = dayOfWeek | TUESDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("WEDNESDAY")){
                dayOfWeek = dayOfWeek | WEDNESDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("THURSDAY")){
                dayOfWeek = dayOfWeek | THURSDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("FRIDAY")){
                dayOfWeek = dayOfWeek | FRIDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }

            if(day.equals("SATURDAY")){
                dayOfWeek = dayOfWeek | SATURDAY;
                System.out.println("dayOfWeek = " + dayOfWeek);
            }
        }

        return dayOfWeek;
    }

    public void viewDays(){
        if (isDayOfWeek(dayOfWeek, SUNDAY)) {
            System.out.println("Days = SUNDAY");
        }
        if (isDayOfWeek(dayOfWeek, MONDAY)) {
            System.out.println("Days = MONDAY");
        }
        if (isDayOfWeek(dayOfWeek, TUESDAY)) {
            System.out.println("Days = TUESDAY");
        }
        if (isDayOfWeek(dayOfWeek, WEDNESDAY)) {
            System.out.println("Days = WEDNESDAY");
        }
        if (isDayOfWeek(dayOfWeek, THURSDAY)) {
            System.out.println("Days = THURSDAY");
        }
        if (isDayOfWeek(dayOfWeek, FRIDAY)) {
            System.out.println("Days = FRIDAY" );
        }
        if (isDayOfWeek(dayOfWeek, SATURDAY)) {
            System.out.println("Days = SATURDAY" );
        }
    }

    public static boolean isDayOfWeek(int days, int day) {
        int x = days & day;
        System.out.println("x = " + x +" which is  "+ ((days & day) == day));
        return (days & day) == day;
    }

}

Tu la code dia, so ada beberapa menda yg korang kena tahu. Ada dua simbul bitwise operator yg korang fimiliar. Sgt fimiliar la kalau korang buat conditional statment.
  1. & -  bitwise AND operation
  2. | -  bitwise inclusive OR operation
Untuk tahu menda ni untuk apa, korang leh rujuk kat sini
Menda ni kita leh dalami lagik dan dalam masa yg sama kita guna la sikit creativity dan imigination kita dalam nak solve. Ni kira contoh nak share bersama.

So, aku buka untuk perbincangan secara bersama. Salah silap tolong tunjukkan. Adios

4 comments:

Tanpa Nama berkata...

Dear saudara penulis,
Saya faham anda menulis dlm bentuk concept sahaja. Tp saya syor kan kurang'n pengguna if/else statement. i saw to many if/else statement in your code. Sy bukan hendak complaint. We can replace your variable declaration in array, so later we can use loop to iterate you array. No need to write so many if/else by yourself. However don't stop writing...

Tulis Tangan berkata...

Terima kasih Saudara Tanpa Nama,
Begini, if..else dibuat supaya pembaca dapat terus melihat secara asas apa yg penulis ingin sampaikan, bagaimana code akan diolah, itu terpulang kepada pembaca. Terima kasih kerna memberi maklum balas.

Chang berkata...

plz keep writing...

Tanpa Nama berkata...

Ratu Java kembali menguasai donia