Pikku ongelma

Eli tehtävänäni on kyhätä kalenteri, joka kysyy käyttäjältä vuoden, kuukauden ja päiväyksen. Ohjelman tulisi kertoa käyttäjälle, mikä viikonpäivä on kyseessä. (Myös kuukausi ja vuosi tulostettava, mutta sehän ei ole ongelma)

Olen keksinyt, miten tutkin karkausvuodet yms., mutta en keksi, minkälaisella silmukalla tms. saisin tutkittua aina kyseisen päivän. Eli onko olemassa joku tietty säännönmukaisuus, jonka välein esim kuun ekapäivä on tietty yms.

Pikkusetkin vinkit ovat tervetulleita. Meinaa olla pikkusen kiire tämän harjotustyön kans. Kurssi vaan kiinni ennää harjotustyöstä. En aijo jatkaa ohjelmointia peruskurssia pidemmälle, joten että tee minulle hallaa, vaikka kertoisittekin reilusti vinkkejä. Pakko vaan saaha tämä kurssi alta pois.

Kiitos vinkeistä jo etukäteen!

-Jolle-
71451
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Piti, perkeleen ääliö, jättää taas niin viime tippaan? Syytä itseäsi!

Äänestä

Tsekkaa Javan omat luokat Date ja Calendar. Voit luoda Date-objektin tietyllä päivämäärällä, esim 18.6.1941, ja kysyä sitten oliolta, että mikäs viikonpäivä oli kyseessä. 18.6.1941 oli Date-luokan mukaan sunnuntai...

Kaikki Java VM:t eivät osaa ottaa huomioon karkaussekunteja jne. Eli oma implementaatio voisi olla paikallaan...

Laitoin muuten Googleen hakusanoiksi "how to determine day of week" ja vastaukseksi tuli:
http://www.mcs.csuhayward.edu/~malek/Mathlinks/Weekdays.html

Ja googlen osoitehan ei sitten ole muuttunut viime kerrasta: http://www.google.fi

Äänestä
  • Auttakaa, please!!
    Eli pitäs tehä kalenteri, joka kertoo 1900-luvun päivän. Löysin tämmösen koodinpätkän, josta aattelin lähtä vähentään tavaraa, jos sattus saamaan ohjelman vaikka siten kasaan. En vaan tiiä mitä tälle pitäs tehä, että menis kääntäjästä läpi. Jos joku pystyy pikasella silmäyksellä sanomaan, mikä mättää, nii ois kiva.:)

    Fani kerto edelliselle jotaki nuista luokista, nii voiko niie avulla saada sitten helposti ohjelman kasaan. En ymmärrä niistä kyllä mitään. Siis mulla ois varmaa aika samanlainen tehtävä, ku tuolla oliko se nyt jolle. Eli pitää laatia ohjelma, joka suorittaa 1900-luvun päiväyksille seuraavanlaisia muunnoksia: 080983 muotoon TORSTAI SYYSKUUN 8. PÄIVÄ 1983.
    Ohjelma hyväksyy syötteiksi vain oikeita päiväyksiä. Vääristä päiväyksistä tulee virheilmoitukset. Ohjelma toimii silmukassa: käyttäjä voi valita, ottaako uuden muunnoksen vai lopettaako ohjelman.
    (1.1.1900 oli maanantai)


    Mutta tässä tämä yks ohjelmanpätkä, jonka haluaisin saaha käännettyä:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.EmptyStackException;
    import java.util.Iterator;
    import java.util.Stack;
    import javax.swing.*;
    import java.awt.*;
    import java.util.GregorianCalendar;
    import java.util.Calendar;


    public class KalenteriM extends JPanel {

    //OMINAISMUUTTUJAT:
    int[][] päivät; //taulukko johon kuukauden päivien numerot tallentuvat
    public Calendar nyt;
    //String- ja int-taulukot päivien ja kuukausien nimien sekä päivien lukumäärän ilmoittamiseen

    public static final String[] PÄIVÄT = {"Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"};
    public static final String[] KUUKAUDET = {"Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"};
    public static final int[] KKPÄIVÄT = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int päiviäKkssa; //päiviä kuukaudessa
    String päivä; //kuukauden päivä
    int ekaPäivä; //kk:n ensimmäinen viikonpäivä
    int alkMäär; //tarvittavien rivien määrä
    Ajettava omaPääohjelma;
    //Käyttäjän syöttämät tiedot, alustetaan tämänhetkiksi
    int käytKk;
    int käytVuosi;
    int rivilkm; //kuukaudessa olevien viikkojen määrä, vajaat viikot lasketaan mukaan
    KalenteriRuutu[][] omatBnit; //taulukko johon KalenteriRuutu-oliot tallennetaan


    //KONSTRUKTORIT:
    //konstruktori 1, luo kalenterin nykyhetkeen
    public KalenteriM(Ajettava po) {
       this.omaPääohjelma = po;
       //Calendar-olio, jolla saadan tämähetkinen aika
       this.nyt = GregorianCalendar.getInstance();
       this.käytKk = nyt.get(Calendar.MONTH);
       this.käytVuosi = nyt.get(Calendar.YEAR);
       this.rivilkm = rivienMäärä(käytVuosi, käytKk);
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       teeIntTaulukko();
       this.setLayout(new GridLayout((rivilkm 1), 7));
       

       omatBnit = new KalenteriRuutu[rivilkm][7];
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          this.omatBnit[i][j] = (new KalenteriRuutu(this, String.valueOf(päivät[i][j])));
        }
       }
       
       
       for (int i = 0; i < 7; i ) {
        this.add(new JLabel(PÄIVÄT[i]));
        }
       
       for (int i = 0; i < (rivilkm); i ) {
        for (int j = 0; j < 7; j ) {
        this.add(omatBnit[i][j]);
        }
       }
       
       this.omaPääohjelma.alapanel.add(this); //lisätään kalenteri päähjelmaan
       
       //PRINTIT
    /*
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          System.out.println(päivät[i][j]);
        }
       }
    */

       
    }

    //konstruktori 2, luo kalenterin syötetiedoilla

       

    public KalenteriM(Ajettava po,int vuosi, int kk) {
       this.omaPääohjelma = po;
       this.nyt = new GregorianCalendar(vuosi, kk, 1);
       this.käytKk = nyt.get(Calendar.MONTH);
       this.käytVuosi = nyt.get(Calendar.YEAR);
       this.rivilkm = rivienMäärä(käytVuosi, käytKk);
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       teeIntTaulukko();
       this.setLayout(new GridLayout((rivilkm 1), 7));
       
       omatBnit = new KalenteriRuutu[rivilkm][7];
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          this.omatBnit[i][j] = (new KalenteriRuutu(this, String.valueOf(päivät[i][j])));
        }
       }
       
       for (int i = 0; i < 7; i ) {
        this.add(new JLabel(PÄIVÄT[i]));
        }
       for (int i = 0; i < (rivilkm) ; i ) {
        for (int j = 0; j < 7; j ) {
        this.add(omatBnit[i][j]);
        }
       }
       
       this.omaPääohjelma.alapanel.add(this);
    }


    //METODEJA

    //laskee kuinka monta riviä kalenteriin tarvitaan, mahdollisia vaihtoehtoja 4, 5, 6

    private int[][] teeIntTaulukko() {
       int eka = laskeKkEka(this.käytVuosi, this.käytKk);
       päivät = new int[this.rivilkm][7];
       int nro = 1;
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       int tyhjät = (eka - 1);
       for (int i = 0; i < tyhjät; i ) {
        päivät[0][i] = 0;
       }

       //eka rivi
       while (eka

    Äänestä

  • minna kirjoitti:

    Auttakaa, please!!
    Eli pitäs tehä kalenteri, joka kertoo 1900-luvun päivän. Löysin tämmösen koodinpätkän, josta aattelin lähtä vähentään tavaraa, jos sattus saamaan ohjelman vaikka siten kasaan. En vaan tiiä mitä tälle pitäs tehä, että menis kääntäjästä läpi. Jos joku pystyy pikasella silmäyksellä sanomaan, mikä mättää, nii ois kiva.:)

    Fani kerto edelliselle jotaki nuista luokista, nii voiko niie avulla saada sitten helposti ohjelman kasaan. En ymmärrä niistä kyllä mitään. Siis mulla ois varmaa aika samanlainen tehtävä, ku tuolla oliko se nyt jolle. Eli pitää laatia ohjelma, joka suorittaa 1900-luvun päiväyksille seuraavanlaisia muunnoksia: 080983 muotoon TORSTAI SYYSKUUN 8. PÄIVÄ 1983.
    Ohjelma hyväksyy syötteiksi vain oikeita päiväyksiä. Vääristä päiväyksistä tulee virheilmoitukset. Ohjelma toimii silmukassa: käyttäjä voi valita, ottaako uuden muunnoksen vai lopettaako ohjelman.
    (1.1.1900 oli maanantai)


    Mutta tässä tämä yks ohjelmanpätkä, jonka haluaisin saaha käännettyä:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.EmptyStackException;
    import java.util.Iterator;
    import java.util.Stack;
    import javax.swing.*;
    import java.awt.*;
    import java.util.GregorianCalendar;
    import java.util.Calendar;


    public class KalenteriM extends JPanel {

    //OMINAISMUUTTUJAT:
    int[][] päivät; //taulukko johon kuukauden päivien numerot tallentuvat
    public Calendar nyt;
    //String- ja int-taulukot päivien ja kuukausien nimien sekä päivien lukumäärän ilmoittamiseen

    public static final String[] PÄIVÄT = {"Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"};
    public static final String[] KUUKAUDET = {"Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"};
    public static final int[] KKPÄIVÄT = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int päiviäKkssa; //päiviä kuukaudessa
    String päivä; //kuukauden päivä
    int ekaPäivä; //kk:n ensimmäinen viikonpäivä
    int alkMäär; //tarvittavien rivien määrä
    Ajettava omaPääohjelma;
    //Käyttäjän syöttämät tiedot, alustetaan tämänhetkiksi
    int käytKk;
    int käytVuosi;
    int rivilkm; //kuukaudessa olevien viikkojen määrä, vajaat viikot lasketaan mukaan
    KalenteriRuutu[][] omatBnit; //taulukko johon KalenteriRuutu-oliot tallennetaan


    //KONSTRUKTORIT:
    //konstruktori 1, luo kalenterin nykyhetkeen
    public KalenteriM(Ajettava po) {
       this.omaPääohjelma = po;
       //Calendar-olio, jolla saadan tämähetkinen aika
       this.nyt = GregorianCalendar.getInstance();
       this.käytKk = nyt.get(Calendar.MONTH);
       this.käytVuosi = nyt.get(Calendar.YEAR);
       this.rivilkm = rivienMäärä(käytVuosi, käytKk);
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       teeIntTaulukko();
       this.setLayout(new GridLayout((rivilkm 1), 7));
       

       omatBnit = new KalenteriRuutu[rivilkm][7];
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          this.omatBnit[i][j] = (new KalenteriRuutu(this, String.valueOf(päivät[i][j])));
        }
       }
       
       
       for (int i = 0; i < 7; i ) {
        this.add(new JLabel(PÄIVÄT[i]));
        }
       
       for (int i = 0; i < (rivilkm); i ) {
        for (int j = 0; j < 7; j ) {
        this.add(omatBnit[i][j]);
        }
       }
       
       this.omaPääohjelma.alapanel.add(this); //lisätään kalenteri päähjelmaan
       
       //PRINTIT
    /*
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          System.out.println(päivät[i][j]);
        }
       }
    */

       
    }

    //konstruktori 2, luo kalenterin syötetiedoilla

       

    public KalenteriM(Ajettava po,int vuosi, int kk) {
       this.omaPääohjelma = po;
       this.nyt = new GregorianCalendar(vuosi, kk, 1);
       this.käytKk = nyt.get(Calendar.MONTH);
       this.käytVuosi = nyt.get(Calendar.YEAR);
       this.rivilkm = rivienMäärä(käytVuosi, käytKk);
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       teeIntTaulukko();
       this.setLayout(new GridLayout((rivilkm 1), 7));
       
       omatBnit = new KalenteriRuutu[rivilkm][7];
       for (int i = 0; i < rivilkm; i ) {
        for (int j = 0; j < 7; j ) {
          this.omatBnit[i][j] = (new KalenteriRuutu(this, String.valueOf(päivät[i][j])));
        }
       }
       
       for (int i = 0; i < 7; i ) {
        this.add(new JLabel(PÄIVÄT[i]));
        }
       for (int i = 0; i < (rivilkm) ; i ) {
        for (int j = 0; j < 7; j ) {
        this.add(omatBnit[i][j]);
        }
       }
       
       this.omaPääohjelma.alapanel.add(this);
    }


    //METODEJA

    //laskee kuinka monta riviä kalenteriin tarvitaan, mahdollisia vaihtoehtoja 4, 5, 6

    private int[][] teeIntTaulukko() {
       int eka = laskeKkEka(this.käytVuosi, this.käytKk);
       päivät = new int[this.rivilkm][7];
       int nro = 1;
       this.päiviäKkssa = päiviäKuukaudessa(käytVuosi, käytKk);
       int tyhjät = (eka - 1);
       for (int i = 0; i < tyhjät; i ) {
        päivät[0][i] = 0;
       }

       //eka rivi
       while (eka

    Tuota ohjelmaa et saa yksinään käännettyä mitenkään. Tarvitset tuon tiedoston lisäksi tiedostot Ajettava.java ja KalenteriRuutu.java. Kopsaa ensin nekin kaveriltasi :D ja koita sitten kääntämistä uudelleen...

    Äänestä

Antaa ne viikonpäivät ihan lontoon kielellä. Sille syötetään vaan päivämäärä ja se kertoo viikonpäivän. Laskee ite karkauspäivätkin.

java.sun.com ja API esille.

Äänestä
  • Voisko joku ystävällisesti kirjottaa jonku esimerkin tommosen luokan käytöstä, nii saattasin sitten saaha jotaki aikaseksikki. Eli miten tuohon luetaan päiväys ja miten sen saa tulostaan sen. Ilmeisesti sinne alkuun pitää kirjottaa jotain import java.io.*; :n lisäksi?
    Kiitti!!

    Äänestä

  • minna kirjoitti:

    Voisko joku ystävällisesti kirjottaa jonku esimerkin tommosen luokan käytöstä, nii saattasin sitten saaha jotaki aikaseksikki. Eli miten tuohon luetaan päiväys ja miten sen saa tulostaan sen. Ilmeisesti sinne alkuun pitää kirjottaa jotain import java.io.*; :n lisäksi?
    Kiitti!!

    http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html

    Äänestä

Kommentoi aloitusta


-Jolle- kirjoitti:

Eli tehtävänäni on kyhätä kalenteri, joka kysyy käyttäjältä vuoden, kuukauden ja päiväyksen. Ohjelman tulisi kertoa käyttäjälle, mikä viikonpäivä on kyseessä. (Myös kuukausi ja vuosi tulostettava, mutta sehän ei ole ongelma)

Olen keksinyt, miten tutkin karkausvuodet yms., mutta en keksi, minkälaisella silmukalla tms. saisin tutkittua aina kyseisen päivän. Eli onko olemassa joku tietty säännönmukaisuus, jonka välein esim kuun ekapäivä on tietty yms.

Pikkusetkin vinkit ovat tervetulleita. Meinaa olla pikkusen kiire tämän harjotustyön kans. Kurssi vaan kiinni ennää harjotustyöstä. En aijo jatkaa ohjelmointia peruskurssia pidemmälle, joten että tee minulle hallaa, vaikka kertoisittekin reilusti vinkkejä. Pakko vaan saaha tämä kurssi alta pois.

Kiitos vinkeistä jo etukäteen!

-Jolle-

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu