Pages

Senin, 09 April 2012

Program Java Membuat Shio
/*
 * Shio.java
 * Copyright (c) 2004 Lucky E. Santoso. All Rights Reserved.
 */

import java.util.*;
import java.text.*;

public class Shio {
  /*
   * Tabel Tahun Baru Imlek dapat dengan mudah diperluas dengan
   * memodifikasi dataImlek dan TAHUN_MIN
   */
  private static String[] dataImlek = {
    "2/6", "1/27", "2/15", "2/3", "1/23", "2/11", "1/31", "2/18",
    "2/7", "1/28", "2/16", "2/5", "1/25", "2/13", "2/2", "2/20",
    "2/9", "1/29", "2/17", "2/6", "1/27"
  };
  private static final int TAHUN_MIN = 1970;
  private static final int TAHUN_MAX = TAHUN_MIN + dataImlek.length;
  private static Calendar[] imlek = new Calendar[dataImlek.length];
  private static String[] namaShio = {
    "Tikus", "Kerbau", "Macan", "Kelinci", "Naga", "Ular",
    "Kuda", "Kambing", "Monyet", "Ayam", "Anjing", "Babi"
  };
  public static final int SANGAT_TIDAK_BERJODOH = 0;
  public static final int TIDAK_ADA_KOMENTAR = 1;
  public static final int SANGAT_BERJODOH = 2;

  static {    /* static initialization */
    SimpleDateFormat format = new SimpleDateFormat("MM/dd");
    for (int i = 0; i < imlek.length; i++) try {
      imlek[i] = new GregorianCalendar();
      imlek[i].setTime(format.parse(dataImlek[i]));
      imlek[i].set(Calendar.YEAR, TAHUN_MIN + i);
    } catch (Exception e) {}
  }

  private Shio() {}    /* mencegah pembentukan object */

  public static int getShio(Date tanggalLahir) {
    Calendar lahir = new GregorianCalendar();
    lahir.setTime(tanggalLahir);
    int tahunLahir = lahir.get(Calendar.YEAR);
    if (tahunLahir < TAHUN_MIN || tahunLahir >= TAHUN_MAX) return -1;
    if (lahir.before(imlek[tahunLahir - TAHUN_MIN])) tahunLahir--;
    return (tahunLahir + 8) % 12;
  }

  public static String getNamaShio(int shio) {
    if (shio < 0 || shio >= 12) return null;
    return namaShio[shio];
  }

  public static int ramalJodoh(int shio1, int shio2) {
    if (shio1 < 0 || shio1 >= 12) return -1;
    if (shio2 < 0 || shio2 >= 12) return -1;
    if (Math.abs(shio1 - shio2) == 4) return SANGAT_BERJODOH;
    if (Math.abs(shio1 - shio2) == 8) return SANGAT_BERJODOH;
    if (Math.abs(shio1 - shio2) == 6) return SANGAT_TIDAK_BERJODOH;
    if ((shio1 + shio2) % 12 == 1) return SANGAT_BERJODOH;
    if ((shio1 + shio2) % 12 == 7) return SANGAT_TIDAK_BERJODOH;
    return TIDAK_ADA_KOMENTAR;
  }
}

0 komentar:

Posting Komentar

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites