päivämäärä laskin

jamala

Tarvitsisin pikaista apua ohjelmaan joka laskee kahden päivämäärän erotuksen (syöte muodossa pp kk vvvv).

Olen saanut aikaiseksi tulostamaan syötteen ja ottamaan huomioon karkausvuoden. Mutta siihen se sitten jää.

4

1010

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ghfghfg

      Voisitko kopioida sen (mitä olet saanut aikaan) tähän?

      • jamala

        public static int[] paivamaaraLukija (Scanner lukija, String kehote){
        int[] paivamaara = new int[3];

        // Kysyy käyttäjältä kahta päivämäärä,
        // syötteenä pp kk vvvv

        System.out.println(kehote);
        paivamaara[0] = lukija.nextInt();
        paivamaara[1] = lukija.nextInt();
        paivamaara[2] = lukija.nextInt();
        lukija.nextLine();
        return paivamaara;
        }
        public static int paiviaKk(int kk, boolean karkausvuosi){
        int[] paivia = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if( karkausvuosi && kk == 2)
        return 29;
        return paivia[kk - 1];

        }

        public static void laskeErotus(int[] paivam1, int[] paivam2){


        }

        /**
        * @return true palauttaa mikäli käyttäjä haluaa lopettaa
        */
        public static boolean haluaaLopettaa (Scanner lukija){
        // Ikuinen silmukka, haluaako käyttäjä lopettaa ohjelman.
        while(true){
        System.out.print(
        "Lopetetaanko (merkki 0 == loppu; merkki 1 == jatketaan)");

        int vastaus = lukija.nextInt();

        if ( vastaus == 0){
        return true;
        }else if ( vastaus == 1){
        return false;
        }else {
        System.out.println("Vastaa kokonaisluvulla 0 tai 1");
        }
        }
        }



        public static void main(String[] args) {
        /**
        * pääohjelma, mikä kutsuu aliohjelmista
        * syötteet, laskee erotuksen, tulostaa ja lopettaa ohjelman.
        */

        Scanner lukija = new Scanner(System.in);
        int[] paivamaara1, paivamaara2;
        for(;;){
        paivamaara1 = paivamaaraLukija(lukija, "Syötä ensimmäinen päivämäärä:");
        paivamaara2 = paivamaaraLukija(lukija, "Syötä toinen päivämäärä:");
        if (haluaaLopettaa (lukija)) break;

        }

        }

        }


      • fidel1
        jamala kirjoitti:

        public static int[] paivamaaraLukija (Scanner lukija, String kehote){
        int[] paivamaara = new int[3];

        // Kysyy käyttäjältä kahta päivämäärä,
        // syötteenä pp kk vvvv

        System.out.println(kehote);
        paivamaara[0] = lukija.nextInt();
        paivamaara[1] = lukija.nextInt();
        paivamaara[2] = lukija.nextInt();
        lukija.nextLine();
        return paivamaara;
        }
        public static int paiviaKk(int kk, boolean karkausvuosi){
        int[] paivia = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if( karkausvuosi && kk == 2)
        return 29;
        return paivia[kk - 1];

        }

        public static void laskeErotus(int[] paivam1, int[] paivam2){


        }

        /**
        * @return true palauttaa mikäli käyttäjä haluaa lopettaa
        */
        public static boolean haluaaLopettaa (Scanner lukija){
        // Ikuinen silmukka, haluaako käyttäjä lopettaa ohjelman.
        while(true){
        System.out.print(
        "Lopetetaanko (merkki 0 == loppu; merkki 1 == jatketaan)");

        int vastaus = lukija.nextInt();

        if ( vastaus == 0){
        return true;
        }else if ( vastaus == 1){
        return false;
        }else {
        System.out.println("Vastaa kokonaisluvulla 0 tai 1");
        }
        }
        }



        public static void main(String[] args) {
        /**
        * pääohjelma, mikä kutsuu aliohjelmista
        * syötteet, laskee erotuksen, tulostaa ja lopettaa ohjelman.
        */

        Scanner lukija = new Scanner(System.in);
        int[] paivamaara1, paivamaara2;
        for(;;){
        paivamaara1 = paivamaaraLukija(lukija, "Syötä ensimmäinen päivämäärä:");
        paivamaara2 = paivamaaraLukija(lukija, "Syötä toinen päivämäärä:");
        if (haluaaLopettaa (lukija)) break;

        }

        }

        }

        En tiedä saatko käyttää java:n API-kirjastoja hyväksi, mutta sieltä löytyy monta hyvää apuluokkaa tämän ratkaisemiseksi, esim. java.text.SimpleDateFormat ja java.util-paketin Date ja Calendar-luokat.

        Tässä vähän hahmottelua, miten minä tämän ratkaisisin:

        public int erotus(String pvm1, String pvm2) {
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("dd MM yyyy");
        java.util.Date date1 = format.parse(pvm1);
        java.util.Date date2 = format.parse(pvm2);

        long diff = Math.abs(date1.getTime() - date2.getTime());
        long days = diff / 86400000;

        return (int)days;
        }

        Näin voit pyytää käyttäjältä päivämääräsyötteet suoraan merkkijonoina ja antaa SimpleDateFormatin huolehtia päivämääräksi muuttamisen. Date-luokan getTime()-metodi palauttaa millisekuntien määrän päivämäärästä 1.1.1970 lähtien. Eli erotus on päivämäärien erotus millisekunteina. Tästä saa jakamalla ja osamääriä ottamalla sitten pulautettua erotuksen siinä muodossa kuin haluaa.

        Huomautus vielä, Date-luokka ottaa huomioon myös aikavyöhykkeet ja kesä/normaaliajan muutokset. Tästä syystä erotukseen tulee helposti tunnin heittoja, jos päivämäärät ovat eri "ajassa".

        Javan API-dokumentaatio löytyy osoitteesta http://java.sun.com/j2se/1.5.0/docs/api/ , sitä kannattaa ihan tosissaan lueskella aina välillä.


    • jamala

      Apua kaivataan vieläkin, solmut eivät tunnu ratkeavan ja aikataulu painaa päälle. Eli ohjelma joka laskee kahden pvm erotuksen, niin että käytetään aliohjelmia syötteiden kysymiseen, erotuksen laskemiseen ja erotuksen tulostukseen

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Veroaste on Suomessa viitisen prosenttiyksikköä liian matala

      Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka
      Maailman menoa
      67
      2395
    2. Tiedän satavarmasti ettet tule koskaan

      Uskaltamaan mitään. Ei me tulla edes näkemään koskaan.
      Ikävä
      66
      1377
    3. Kyläkauppias ajoi kännissä töistä kotiin

      Ei edes kallis auto estä humalassa ajamista, vaikka luulisi alkolukko olevan sellaisessa jo vakiovarusteena. https://ww
      Maailman menoa
      73
      1167
    4. EU komissio - EU-elpymisrahoja voidaan käyttää TILAPÄISESTI väärin!

      Espanja ohjasi miljardeja euroja – Nyt EU-komissio teki yllättävän paljastuksen Skandaaliksi noussut Espanjan EU-rahoje
      Maailman menoa
      4
      1107
    5. Miks me oikein

      Rakastuttiin vaikka kaikki on mahdotonta?
      Ikävä
      78
      832
    6. Kiitos upeasta palvelusta kukkamyyjä

      Kiitos sinulle upea kaunis kukkamyyjä Kuhmon torilla 🌹 Upea iloinen asenteesi ja kaunis hymysi pelasti päiväni ❤️ Jäi
      Kuhmo
      19
      780
    7. Nainen, mikset lähetä

      miehelle viestiä? Tiedän, että sulla on asiaa ja kysyttävää.
      Ikävä
      43
      668
    8. Ratikka Turkuun

      Ei hyvä. Ja syy on siinä , kukaan ei osaa suunnitella oikeaa reittiä. Pitää huomioide, kiskoja sijaintia ei voi muutta
      Turku
      82
      660
    9. Miehet trikoissaan

      On se kauhian näkköistä, kun miehet tiukossa trikkoissa juoksentelloo ja mulukku paestaa trikkoijjen läpi. Kahtokkee pe
      Suomussalmi
      24
      638
    10. Rakastan sinua

      Yhä.
      Ikävä
      30
      616
    Aihe