Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.29 KB | None | 0 0
  1. package demo.d6;
  2.  
  3. import fi.jyu.mit.ohj2.*;
  4.  
  5. /**
  6.  * Alustava luokka päivämäärää varten
  7.  * @author Vesa Lappalainen
  8.  * @version 1.0, 07.02.2003
  9.  * @version 1.1, 14.02.2003
  10.  * @version 1.2, 17.02.2003
  11.  * @version 1.3, 11.02.2008
  12.  */
  13. public class Pvm {
  14.  
  15.     private int pv;
  16.     private int kk;
  17.     private int vv;
  18.     private static final int kk_pituudet[][] = {
  19.             // 0   1   2   3   4   5   6   7   8   9  10  11  12
  20.              { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
  21.              { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
  22.      };
  23.  
  24.  
  25.     /**
  26.      *  Muuttaa päivämäärän nykypäivälle.
  27.      *  Todo: pitää vaihtaa hakemaan päivämäärä oikeasti.
  28.      *  Mutta perinnässäkään ei nyt saa käyttää enempää attribuutteja kuin tässä on
  29.      */
  30.      
  31.      public static int karkausvuosi(int vv) {
  32.         if ( vv % 400 == 0 ) return 1;
  33.         if ( vv % 100 == 0 ) return 0;
  34.         if ( vv % 4 == 0 ) return 1;
  35.         return 0;
  36.     }
  37.    
  38.     public void paivays() {
  39.         pv = 0;
  40.         kk = 0;
  41.         vv = 0;
  42.     }
  43.  
  44.    
  45.     public static int compareTo(Pvm eka, Pvm toka) {
  46.          int p = eka.getPv();
  47.          int k = eka.getKk();
  48.          int v = eka.getVv();
  49.          int p2 = toka.getPv();
  50.          int k2 = toka.getKk();
  51.          int v2 = toka.getVv();
  52.        
  53.          if (v > v2) return 1;
  54.          if (v == v2) {
  55.              if (k > k2) return 1;
  56.              else if(k == k2) {
  57.                  if (p > p2) {
  58.                      return 1;
  59.                  }
  60.                      else if (p == p2) {
  61.                          return 0;
  62.                      }
  63.                  }
  64.              }
  65.         return -1;
  66.     }
  67.    
  68.     public int compareTo(Pvm eka) {
  69.         int p = eka.getPv();
  70.         int k = eka.getKk();
  71.         int v = eka.getVv();
  72.        
  73.         if (v > vv) return 1;
  74.         if (v == vv) {
  75.          if (k > kk) return 1;
  76.          else if(k == kk) {
  77.              if (p > pv) {
  78.                  return 1;
  79.              }
  80.                  else if (p == pv) {
  81.                      return 0;
  82.                  }
  83.              }
  84.          }
  85.     return -1;
  86.     }
  87.    
  88.     public boolean equals(Pvm eka) {
  89.         int p = eka.getPv();
  90.         int k = eka.getKk();
  91.         int v = eka.getVv();
  92.         if (v > vv) return false;
  93.         if (v == vv) {
  94.          if (k > kk) return false;
  95.          else if(k == kk) {
  96.              if (p > pv) {
  97.                  return false;
  98.              }
  99.                  else if (p == pv) {
  100.                      return true;
  101.                  }
  102.              }
  103.          }
  104.     return false;
  105.       }
  106.  
  107.     /**
  108.      * Alustetaan päivämäärä. 0-arvot eivät muuta vastaavaa attribuuttia  
  109.      * TODO: oikeellisuustarkistukset
  110.      * @param ipv päivän alustus
  111.      * @param ikk kuukauden alustus
  112.      * @param ivv vuoden alustus
  113.      */
  114.     public void alusta(int ipv, int ikk, int ivv) {
  115.     int kv = karkausvuosi(ivv);
  116.    
  117.     if (ikk>12) {
  118.         return;
  119.     }
  120.     else {
  121.         if (ipv > 0 && ipv <= kk_pituudet[kv][ikk]) this.pv = ipv;
  122.         if (ikk == 2) {
  123.             if(ipv>28 || ipv == 0) {
  124.                 return;
  125.             }
  126.         }
  127.         if (ikk > 0 && ikk < 13 && (ipv == 0 || ipv > 0 && ipv <= kk_pituudet[kv][ikk])) {    
  128.             this.kk = ikk;
  129.         }
  130.         if ( ivv > 0 && (ikk == 0 || ikk > 0 && ikk < 13 && (ipv == 0 || ipv > 0 && ipv <= kk_pituudet[kv][ikk]))) this.vv = ivv;
  131.         if ( this.vv < 50 ) this.vv += 2000;
  132.         if ( this.vv < 100 ) this.vv += 1900;
  133.     }
  134.     }
  135.  
  136.  
  137.     /** Alustetaan kaikki attribuutit oletusarvoon */
  138.     public Pvm() {
  139.         this(0, 0, 0);
  140.     }
  141.  
  142.  
  143.     /**
  144.      * Alustetaan kuukausi ja vuosi oletusarvoon
  145.      * @param pv päivän alustusarvo
  146.      */
  147.     public Pvm(int pv) {
  148.         this(pv, 0, 0);
  149.     }
  150.  
  151.  
  152.     /**
  153.      * Alustetaan vuosi oletusarvoon
  154.      * @param pv päivän alustusarvo
  155.      * @param kk kuukauden oletusarvo
  156.      */
  157.     public Pvm(int pv, int kk) {
  158.         this(pv, kk, 0);
  159.     }
  160.  
  161.  
  162.     /**
  163.      * Alustetaan vuosi oletusarvoon
  164.      * @param pv päivän alustusarvo
  165.      * @param kk kuukauden oletusarvo
  166.      * @param vv vuoden alustusarvo
  167.      */
  168.     public Pvm(int pv, int kk, int vv) {
  169.         paivays();
  170.         alusta(pv, kk, vv);
  171.     }
  172.  
  173.  
  174.     /**
  175.      * Alustetaan päivämäärä merkkijonosta
  176.      * @param s muotoa 12.3.2008 oleva merkkijono
  177.      */
  178.     public Pvm(String s) {
  179.         paivays();
  180.         pvmParse(s);
  181.     }
  182.  
  183.  
  184.  
  185.     @Override
  186.     public String toString() {
  187.         return pv + "." + kk + "." + vv;
  188.     }
  189.  
  190.  
  191.     /**
  192.      * Ottaa päivämäärän tiedot merkkijonosta joka on muotoa 17.2.2007
  193.      * Jos joku osa puuttuu, sille käytetään tämän päivän arvoa oletuksena.
  194.      * @param sb tutkittava merkkijono
  195.      */
  196.     protected final void pvmParse(StringBuilder sb) {
  197.         int p = this.pv;
  198.         int k = this.kk;
  199.         int v = this.vv;
  200.         if(sb.toString().contains(".")) {
  201.         p = Mjonot.erota(sb, '.', 0);
  202.         k = Mjonot.erota(sb, '.', 0);
  203.         v = Mjonot.erota(sb, ' ', 0);
  204.         }
  205.         else {
  206.             p = Integer.parseInt(sb.toString());
  207.             sb.delete(0, sb.length());
  208.         }
  209.         alusta(p, k, v);
  210.         // tai alusta(Mjonot.erota(sb,'.',0),Mjonot.erota(sb,'.',0),Mjonot.erota(sb,'.',0));
  211.     }
  212.  
  213.  
  214.  
  215.     protected final void pvmParse(String s) {
  216.         pvmParse(new StringBuilder(s));
  217.     }
  218.  
  219.  
  220.  
  221.     public void parse(String s) {
  222.         pvmParse(s);
  223.     }
  224.  
  225.  
  226.  
  227.     public void parse(StringBuilder sb) {
  228.         pvmParse(sb);
  229.     }
  230.  
  231.  
  232.  
  233.     public int getPv() {
  234.         return pv;
  235.     }
  236.  
  237.    
  238.     public int getKk() {
  239.         return kk;
  240.     }
  241.  
  242.  
  243.     /**
  244.      * @example
  245.      * <pre name="test">
  246.      *   Pvm pvm = new Pvm(20,2,2012);
  247.      *   pvm.alusta(1,3,0);     pvm.toString() === "1.3.2012";
  248.      *   pvm.alusta(2,13,2012); pvm.toString() === "1.3.2012";
  249.      *   pvm.alusta(28,2,2012); pvm.toString() === "28.2.2012";
  250.      *   pvm.alusta(29,2,2011); pvm.toString() === "28.2.2012";
  251.      *   pvm.alusta(29,2,2012); pvm.toString() === "29.2.2012";
  252.      *   pvm.alusta(31,3,2012); pvm.toString() === "31.3.2012";
  253.      *   pvm.alusta(31,4,2012); pvm.toString() === "31.3.2012";
  254.      *   pvm.alusta( 0,2,2012); pvm.toString() === "31.3.2012";
  255.      * </pre>
  256.  
  257.      * @example
  258.      * <pre name="test">
  259.      *  Pvm pv1 = new Pvm(15,6,2013);
  260.      *  Pvm pv2 = new Pvm(14,5,2014);
  261.      *  Pvm pv3 = new Pvm(15,7,2014);
  262.      *  Pvm pv4 = new Pvm(16,7,2014);
  263.      *  Pvm pv5 = new Pvm(16,7,2014);
  264.      *  Pvm pv6 = new Pvm(16,7,2012);
  265.      *  Pvm.compareTo(pv1,pv2) === -1;  // ero vuodessa
  266.      *  Pvm.compareTo(pv2,pv1) ===  1;
  267.      *  Pvm.compareTo(pv2,pv3) === -1;  // ero kuukaudessa
  268.      *  Pvm.compareTo(pv3,pv2) ===  1;
  269.      *  Pvm.compareTo(pv3,pv4) === -1;  // ero päivässä
  270.      *  Pvm.compareTo(pv4,pv3) ===  1;
  271.      *  Pvm.compareTo(pv4,pv5) ===  0;  // kaikki samoja
  272.      *  Pvm.compareTo(pv6,pv2) === -1;  // ero kuukaudessa, mutta vuodessa toisinpäin
  273.      *  Pvm.compareTo(pv2,pv6) ===  1;
  274.      * </pre>
  275.      */
  276.     public int getVv() {
  277.         return vv;
  278.     }
  279.  
  280.  
  281.     /**
  282.      * Testataan päivämäärä-luokkaa
  283.      * @param args ei käytössä
  284.      */
  285.     public static void main(String[] args) {
  286.         Pvm pvm = new Pvm();
  287.         pvm.alusta(31,3,2012);
  288.         System.out.println(pvm + " eka");
  289.         pvm.alusta(0,2,2012);
  290.         System.out.println(pvm + " toka");
  291.     }
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement