The referenced paragraph does not exist.
{}

Demo 5, 15.2.2016

{}

Muistakaa päivittää .jar tiedostot

Muistakaa hakea uudet versio .jar-tiedostoista (ks. Kurssin Java FX:ään liittyviä JAR-tiedostoja)

  • FXGui.jar mm. RadioButtonChooser, Dialogs
  • FXPackage.jar - tällä on helpompi tehdä JavFX-projekti ja saada nimet kohdalleen.

Tehtäviin käytetty aika

Mikäli teet tehtäviä Eclipsellä, niin laita ennen aloittamista “vastauslaatikkoon” vastaus: “aloitus” ja “tallenna/aja” se kerran. Näin saamme aloitusaika-arvion kustakin tehtävästä ja sitten kun saamme viimeisen palautuksen ajan, jolloin voimme vähän arvioida kuinka kauan tehtävien tekemiseen menee aikaa. Toki kahvitauot sotkevat tätä :-)

Testaaminen

Kaikki “järkevästi” testattavissa olevat ohjelmat testattava automaattitestillä (JUnit tai ComTest). Jos testaa GUI-ohjelmia saa merkitä yhden lisäbonuspisteen (ei opeteltu tällä kurssilla).

{}

Jos halutaan että regular expressionissa .* voi vastata myös rivinvaihtoja, pitää se testi tehdä optiolla ?s regexpin alussa:

{}
s =R= "(?s).*Poika: 2.*"; 
{}

Itsearvio A1 (0p mutta pakollinen)

Jollet tehnyt jo maanantain demopalautuksessa, niin täytä edellisen (esim. demo1:n arvion demo 2 kerralla) kerran itsearviolomake.

Kirjoita alla olevaan tekstilaatikkoon kunkin edellisen demokerran tehtävän kohdalle === katkoviivan alle:

  • millainen oli oma vastauksesi verrattuna malliin/demojen palautuksessa käsiteltyyn tehtävään
  • olisiko omassa vastauksessasi pitänyt olla jotakin enemmän/vähemmän
  • jos et ollut tehtävää tehnyt, niin miksi?
  • jos et ollut tehtävää tehnyt, niin mitä ymmärsit vastaavasta mallivastauksesta tai demojen palautuksessa käsitellystä vastauksesta
  • osaisitko nyt tehdä vastaavan tehtävän ja miten, kun olet mallin nähnyt?

Erityisesti täytettävä perustehtävien “Tehtävä X” osalta, missä X on jokin numero. Sekä kaikkien muiden, mitä olet tehnyt (mahdollisesti esim. Tauno, B-G). Toki mielellään ymmärtämisen osalta myös tehtävän B osalta, vaikket olisi tehnytkään.

Lisää tarvittavat otsikkorivit lopuille tehtäville samaan tyyliin kuin alla on tehty.

#

Please to interact with this component

==================================================
Tauno T1
==================================================


==================================================
Ville V1
==================================================



==================================================
Tehtävä 1
==================================================




==================================================
Tehtävä 2
==================================================

Video 1 (1 p)

Muista että voit saada demopisteitä myös indeksoimalla luento/demovideoita, ks: videohakemisto. Demopisteen saat lisäämällä vähintään 3 linkkiä. Video-tehtävä ei saa olla yksi pakollisesta kahdesta tehtävästä.

#

Please to interact with this component

{}

Tauno T1 (0.5p)

Tee Demo 1:n Tauno-tehtävät suoraan silmukalla ko. demossa annettuun pohjaan ja lisää testejä eri kokoisille taulukoille. Silmukkaa suunnitellessa katso Taunolla tehtyjä vastauksia. Kopioi alle tekemäsi koodi kokonaisuudessaan.

#

Please to interact with this component

Miten testejä eri kokoisille taulukoille oli tarkoitus lisätä? Demo 1:n Tauno-pohjassa saa muokata vain aliohjelman sisältöä.. Kirjoitetaanko tämä kuitenkin aliohjelman esittelyriveineen (ja siten kommentteineen ja testeineen) päivineen, vaikkei ne olekaan minun tekemää koodia?
- VL: tehtävää muutettu niin että tähän voi kopioida koko valmiin ohjelman aliohjelmineen ja testeineen. Ja siihen kopioon voi lisätä testejä.

11 Feb 16 (edited 11 Feb 16)
{}

Ville V1 (0.5p)

Tee JAVA Villestä tehtävät 6. Aliohjelmat 1: Proseduurit. 1.4 Ville-tehtävien palautus NettiDemoWWW:llä.

Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.

#

Please to interact with this component

{}

Tehtävä 1*. Henkilön toString ja parse

Muuta edellisen demon tehtävän 7-8 vastausta (Henkilo.java) seuraavasti:

  • Lisää luokkaan parametriton muodostaja.
  • Lisää metodi parse, joka selvittää henkilön tiedot tolppa-erotetusta merkkijonosta.
  • Kirjoita vielä muodostaja jolla on yksi merkkijonoparametri ja muodostaja kutsuu parse-metodia.
#

Please to interact with this component

//
    Kirjoita loput luokasta tähän
{}

Lisäysten jälkeen pääohjelman pitäisi tulostaa:

{}
{}
||0
Sepe Susi 1933
Aku Ankka 1934
Mikki|Hiiri|0
{}
#

En näe tämän tarpeellisuutta meidän opiskelijoiden kannalta. Minulle tämä on vain yksi nappi lisää mitä pitää näppäillä, kun haluaisi, että asioita suoraviivaistettaisin.
- VL: liian moni tekee ilman Eclipseä ja on loppukurssista vaikeuksissa. Tämä toivottavasti muistuttaa siitä että kannattaa käyttää IDEä.

12 Feb 16 (edited 14 Feb 16)

Omalla koneella törmää jatkuvasti Eclipsen kanssa tilanteisiin, joita en osaa ratkoa (enkä ole varma edes johtuuko Eclipsesta). Esimerkiksi niinkin simppeli, kuin fi.jyu.mit.ohj2.* -importtaus ei onnistu tai sitten en osaa/löydä selitystä ohjeista.

15 Feb 16 (edited 15 Feb 16)

http://users.jyu.fi/~vesal/kurssit/ohj2/ali/ löytyy ohjeet tuohon import juttuun. Mitä IDE:n käyttöön tulee niin minulla ainakin Eclipse yksinkertaisesti toimi huonosti ja siirryin käyttämään toista IDEä. Tuleeko loppukurssista jotain sellaista, joka pakottaa juuri Eclipseen?

16 Feb 16

Tehtävä 2*. Päivämäärä-luokka

Kirjoita luokkaan Pvm.java saantimetodit päivälle, kuukausille ja vuosille. Ei tarvitse tehdä tiedostossa olevia TODO: -juttuja (vielä :-). Tee vielä main, jossa käytät gettereitä esimerkiksi seuraavasti:

Siis mitä tässä tehtävässä pitää tehdä?

15 Feb 16

Vois vähän selkeämmin yrittää kirjoittaa tehtävänannot.

15 Feb 16
{}
Pvm pvm = new Pvm();
pvm.parse("3.4.2011");
System.out.println(pvm.getPv()); // tulostaa 3

Huom! Tarvittava mjonot on Ali.jar paketissa.

#

Please to interact with this component

//
    Kirjoita loput luokasta ja main tähän
{}
#

Tehtävä 3-4. Äänestys: tyttö, poika, nainen, mies

Tee Äänestys-JavaFx ohjelma, jossa voit äänestää, oletko tyttö, poika, nainen vai mies käyttäen jotakin pohjista. Ohjelma tallentaa vastausten määrän ja näyttää sen käyttäjälle. Alla olevasta voit ottaa mallia millainen ohjelman ulkoasun pitäisi olla:

Vinkki: Lisää kontrolleri-luokkaan attribuutteja äänestyskohteita varten. Metodissa aanesta katso mitä äänestettiin ja kasvata vastaavaa muuttujaa. Sitten tee tulostettava merkkijono jonka näytät dialogilla. Dialogs.showMessageDialogiin saa helposti uusia rivejä laittamalla "\n" näytettävään viestiin.

HUOMAUTUS: Ole huolellinen tiedostojen nimien kanssa kun palautat. Mikäli paketin nimi on vaikkapa demo.d5.fx, niin tallenna AanestysView.fxml nimelle demo/d5/fx/AanestysView.fxml ja vastaavasti .css tiedostolle. Mikäli paketin nimi on demo5, kelpaa oletusnimet.

#

Please to interact with this component

#

Please to interact with this component

#

Please to interact with this component

#

Please to interact with this component

{}

Voit halutessasi tehdä yhden extrapisteen tekemällä samasta ohjelmasta version, jossa kaikki on tehty Javalla ja kaikki koodi on yhdessä tiedostossa. Vertaa AanestysMain5.java

#

Please to interact with this component

#

Tehtävä 5*. Linja-auto

Toteuta luokka LinjaAuto, jossa on ominaisuudet paikkojen lukumäärä ja vapaiden paikkojen lukumäärä. Tee muodostaja, jolla kerrotaan paikkojen lukumäärä. Tee metodit tulosta (vrt. Henkilo-tehtävä) sekä lisaa ja vahenna muuttamaan matkustajien lukumäärää. Kirjoita testipääohjelma.

Mitä tuon "tulosta" metodin on tarkoitus tehdä? Riittääkö pelkkien muuttujien tilanteen tulostaminen?
- VL: tässä tehtävässä saa tehdä aika vapaasti, seuraavassa se on määritelty tarkemmin.

11 Feb 16 (edited 13 Feb 16)
#

Please to interact with this component

public class LinjaAuto {

}
{}
#

Tehtävä 6*. Linja-auto

Modifioi edellistä ratkaisua siten, että luokaa LinjaAuto voi käyttää seuraavassa testiohjelmassa (tulostukset voivat olla kauniimpia, esimerkit lyhyyden vuoksi). Älä muuta yhtään pääohjelmaa. Tulostusten pitää sisältää kommenteissa olevat luvut vastaavassa järjestyksessä.

{}
#

Please to interact with this component

public class LinjaAuto {

    public static void main(String[] args) {
        LinjaAuto pikkubussi = new LinjaAuto(10);
        LinjaAuto isobussi = new LinjaAuto(45);
        pikkubussi.lisaa(4);    pikkubussi.tulosta(System.out); // 10,4,6
        isobussi.lisaa(30);     isobussi.tulosta(System.out);   // 45,30,15
        int yli = pikkubussi.lisaa(15);
        isobussi.lisaa(yli);
        pikkubussi.tulosta(System.out);                         // 10,10,0
        isobussi.tulosta(System.out);                           // 45,39,6
        if ( pikkubussi.getTilaa() > 0 )
            System.out.println("Pieneen bussiin mahtuu!");   // ei tulosta
        if ( isobussi.tilaa() )
            System.out.println("Isoon bussiin mahtuu!");     // tulostaa
        int vajaa = pikkubussi.vahenna(12);                  // vajaa = -2
        if ( vajaa < 0 )
            System.out.println("Pikkubussissa ei edes ole näin montaa!");
        pikkubussi.tulosta(System.out);                         // 10,0,10
   }

}
{}
#

Ei, en käyttänyt tehtävän tekemiseen Eclipseä. Siirryin käyttämään IntelliJ IDEAa, joka vaikuttaa heti miellyttävämmältä käyttää kuin kaikin puolin rosoinen ja sekava Eclipse. IDEAstakin on saatavilla (ilmaiset) versiot Windowsille, OS X:lle ja Linuxille ja lisäksi opiskelijan/opettajan on mahdollista saada ilmainen lisenssi IDEAn Pro-versioon. Kurssilla voitaisiin harkita siirtymistä IDEAaan tai ainakin mainita opiskelijoille sen olemassaolosta.
- VL: Mietippä oliko tuo ensimmäinen virke tuossa sellainen joka vie asiaa eteenpäin! Mutat näitä IDEjä tulee ja menee, ei voi vaihtaa joka kerta kun joku toinen siiryy himpun edelle. Jos IDEn vaihtaisi pitäisi pluginit tehdä sille uudelleen.

12 Feb 16 (edited 13 Feb 16)

Tehtävä 7. Tietokone

Kirjoita yksinkertainen luokka Tietokone, jossa on tietokoneelle tarpeellisia attribuutteja (muistin määrä, kovalevyn koko jne..) sekä tarvittavat muodostajat sekä sopivat metodit. Kirjoita myös testipääohjelma.

#

Please to interact with this component

public class Tietokone {

}
{}

Tehtävä 8. Javan bittioperaatiot

Etsi sopivista lähteistä (esim. luentomoniste) tietoa Javan bittioperaatioista ja selvitä mitä tapahtuu seuraavassa ohjelmanpätkässä (tutki pöytätestillä):

{}
    /* 01 */  int a=23,b=13,c=17;         
    /* 02 */  char m = 'b';
    /* 03 */  if ( ( a = b ) != 0 ) c+=0x0f;
    /* 04 */  if ( ( a & ~b ) != 0 ) c--;
    /* 05 */  m ^= 1 << 5;
    /* 06 */  if ( m == 'B' ) b &= c;
    /* 07 */  System.out.print("a=" + a + " b=" + b + " c=" + c + " m=" +m );

Palautuksesta pitää löytyä jostakin kohti mitä koodi tulostaa täsmälleen oikeassa muodossa. Siis mitä riviltä 07 tulostuu.

#

Please to interact with this component

{}

Tehtävä B1-2. User-luokka

Muuta Demo 3:n LueUsers.java guru-tehtävän vastaus sellaiseksi, että siinä on luokka User ja attribuutteina luokassa on aliohjelman kasitteleRivi tarvittavat lokaalit muuttujat. Varsinaisen muunnostyön hoitaa metodi setAsHTMLString ja tulos saadaan metodilla getAsListString. Muut metodit ja konstruktorit yms. saat määritellä itse.

#

Please to interact with this component







93 Vesa Lappalainen = 8.5
94 Matti Meikäläinen = 8
95 Teppo Teikäläinen = 9
#

Please to interact with this component

{}
#

Please to interact with this component

Eikä tullut dokua! t: peantuus

14 Feb 16 (edited 14 Feb 16)

VL: Dokumentti kyllä syntyy, mutta jos katsot edellisen laatikon dokumentista, niin näet että sen osoite on erilainen, eli esim. User.java:n linkki on:

https://tim.jyu.fi.../html/User_8java.html

kun taas tässä tehtävässä on:

https://tim.jyu.fi.../html/d5_2LueUsers_8java.html

Sulla on LueUsers myös demossa 3 ja silloin tuonne loppudokumentteihin tulisi 2x sama nimi ja tuo Doxygen näköjään SILLOIN erottaa ne tuolla paketin nimellä. En tähän hätään keksi tuolle mitään yksinkertaista korjausta (parin tunin työ varmaan), joten tämän kanssa on elettävä ja katsottava se doku tuolta toisesta laatikosta. Harmillista että URL on erilainen eri tilanteissa. Yksinkertainen korjaus olisi että en yrittäisikään näyttää sen tiedoston dokua koskaan vaan avaisin aina vaan tuon File List-kohdan ja käyttäjä itse valistee oikean tiedoston. Ehkä korjaan tämän (30 min juttu) joskus niin, että tarkistan löytyykö se arveltu nimi ja jos ei löydy, niin avaan silloin tuon tiedostolistan.
VL: Muutettu tuon viimeisen ajatuksen mukaiseksi (meni ehkä 15 min)

14 Feb 16 (edited 14 Feb 16)
{}
#

Tehtävä B3. Astia-peli

Täydennä luennolla annettu astia/Astia.java niin että se toimii alkukommenteissa olevien määritysten mukaan. Alla olevasta voi kopioida valmiin pääohjelman, jonka puutuvat metodit täydentämällä homman pitäisi toimi. Ideaa varten kokeile ajettavaa graafista Java-ohjelmaa: GraafinenAstiaPeli.jar ja/tai Windows-ohjelmaa: n:\kurssit\winohj\moniste\tentit\v00\Ampari.exe.

{}
#

Please to interact with this component

package demo.d5;

public class Astia {

    public static void main(String[] args) {
        Astia astiat[] = { new Astia("ä", 100),
                           new Astia("5", 5), new Astia("8", 8) };
        Astia ampari = astiat[0];
        ampari.tayta();

        tulostaOhje(astiat);

        while ( true ) {
            for (int i = 1; i < astiat.length; i++)
                System.out.println(astiat[i].getTilavuus()+" litran astiassa on "+
                                   astiat[i].getMaara() + " litraa nestettä");
            String rivi = Syotto.kysy("Mistä kaadetaan ja mihin");
            if ( rivi.length() == 0 ) break;

            StringBuilder sb = new StringBuilder(rivi);
            String mista = Mjonot.erota(sb);
            String mihin = Mjonot.erota(sb);
            int imista = etsi(astiat, mista);
            int imihin = etsi(astiat, mihin);

            if ( (imista < 0) || (imihin < 0) )
                nimiOhje(astiat, mista, mihin);
            else astiat[imista].kaada(astiat[imihin]);
        }
    }


}

Mikäli haluat tehdä homman fiksusti (saat +0.5 p), niin sijoitat Astia-luokkaan vaan ne asiat mitkä liittyvät astiaan. Ja sitten toiseen luokkaan AstiaPeli ne asiat, jotka kuuluvat tähän nimenomaiseen peliin. Silloin mm. edellinen pääohjelma kuuluu AstiaPeli-luokkaan.

#

Please to interact with this component

Huomautus: Tämä tehtävä tulee jatkumaan useammassa demossa!

{}
#

Tehtävä B4-5. Väli-luokka

Toteuta Vali -luokka, joka tallettaa suljetun reaalilukuvälin (päätepisteet ei-negatiivisia reaalilukuja). Kirjoita metodit parse ja compareTo(vali). parse kelpuuttaa seuraavat muodot (oletetaan että väli on alustettu ennen jokaista esimerkkiä väliksi [0,5]):

{}
vali.parse("")       => 0-5
vali.parse("3")      => 3-3
vali.parse("3-")     => 3-5
vali.parse("-3")     => 0-3
vali.parse("1-3")    => 1-3

compareTo palauttaa tiedon siitä osuuko toinen väli itse olioon. Testiohjelmassa on tehty kaksi väliä, sitten otettu niihin tiedot merkkijonosta ja sitten verrattu osuvatko välit toisiinsa.
(Testi)pääohjelma voisi olla esimerkiksi:

#

Please to interact with this component

package demo.d5;

public class Vali {

    public static void main(String[] args) {
        Vali v1 = new Vali(1, 3), v2 = new Vali(2, 4);
        System.out.println(v1); // tulostaa (1.0-3.0)
        System.out.println(v2); // tulostaa (2.0-4.0)
        v1.parse("2-");    // loppupiste puuttuu, käytetään valin olemassa olevaa
        v2.parse("2.5-7");
        System.out.println(v1); // tulostaa (2.0-3.0)
        System.out.println(v2); // tulostaa (2.5-7.0)
        int osuman_laatu = v1.compareTo(v2); // vastaa "vähennyslaskua"
                                             // ol = v1 - v2;
        if ( osuman_laatu == 0 ) // esimerkin välit osuvat
            System.out.println("Välit osuvat toisiinsa");
        else if ( osuman_laatu == 1 )
            System.out.println("v1 kokonaan v2:n oikealla puolella");
        else if ( osuman_laatu == -1 )
            System.out.println("v1 kokonaan v2:n vasemmalla puolella");
    }

}

Allekirjoittanut saa 2p ajettaessa. Testillä 0p, vaikka kaikki testit menevät ihan hyvin läpi. (Ja itseasiassa testien läpi saaminen oli tehtävän vaikein osa.). Pisteet tippuvat nollaan myös jos erehdyn katsomaan dokun, joten oletan että vika on tehtävässä. -adrasaik
- VL: ei tehtävässä vaan sen arvostelevassa osassa. Arvostelua tekevän on mahdollista laittaa cumulative: true jolloin eri osoiden pisteet lasketaan yhteen tai olla laittamatta tuota, jolloin viimeisen määrää pisteet. Ja tuossa on looginan ajatusvirhe, eli jos antaa vain yhdet pistesäännöt, niin muut ovat oletuksena nollia ja viimeisen määrää pisteet. Korjattu.

13 Feb 16 (edited 14 Feb 16)
{}

Pohdi onko mielekästä, että compareTo palauttaa 0 jos välit osuvat toisiinsa. Vihje : Piirrä kuva, miten kaksi väliä käyttäytyy toisiinsa nähden.

{}
#

Tehtävä G1. Väli-luokka ja leikkaus

Lisää tehtävään B4-5 vielä tarvittavat metodit ja määrittele tyhjä väli, jotta seuraavat kutsut toimivat:

{}
#

Please to interact with this component

package demo.d5;

public static class Vali{

   // Kopioi tähän väli jossa leikkaus toimii

    public static void main(String[] args) {
        Vali v1 = new Vali(1, 3), v2 = new Vali(2, 4);
        Vali v3 = v1.leikkaus(v2);
        System.out.println(v3);
        if ( v1.leikkaus(v2) == Vali.Tyhja )
            System.out.println("Välit eivät osu");
    }

}

Aika huonosti muotoiltu tehtävänanto. En ymmärrä mitä tässä haetaan.

15 Feb 16

Voitaisiinko tehdä välien yhdiste ja mitä ongelmia siitä seuraisi?

{}
#

Please to interact with this component

#

Tehtävä K1. getParameter paremmin

Miten seuraava pitäisi kirjoittaa jotta koodirivejä tulisi oleellisesti puolet vähemmän (kun parametrinhakurivejä tulee oikeasti kymmeniä):

{}
  String beginHour = request.getParameter("beginHour");
  String endHour = request.getParameter("endHour");
  if (beginHour == null) beginHour="";
  if (endHour == null) endHour="";

request on tyyppiä HttpServletRequest jos haluaa “täydellisen” vastauksen antaa.

#

Please to interact with this component

K-alkuiset tehtävät ovat (vanhasta) Korpista otettuja koodinpätkiä, joissa olisi pitänyt osata alunperinkin tehdä paremmin.

Extragurut max 9p.

Mikäli olet tehnyt jotakin muuta kurssia oleellisesti hyödyttävää koodia, niin laita alle osoite mihin olet tehnyt ja pieni selostus siitä, että mitä olet tehnyt. Tästä voit merkitä itsellesi max 9 p.

Tehtäviä asioita voi olla esimerkiksi parantaa kurssin komponentteja FXGui.jar:

  • StringGrid - helpompi käyttö koodista että tietää missä klikattiin yms
  • Chooser -sarja, ks: vastaava Swing-puolelta
{}
#

Please to interact with this component

Shell

Alla olevalla komentoshellillä voit katsoa onko tiedostosi oikeissa paikoissa jos jossakin kohti tulee ongelmia.

{}
#

Please to interact with this component

ls -R

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.