Ohjelmointi 2 2006/ 3.4

Demo 12


1-2
Muuta ohjelman (ks. demo 11 vast.) ValuuttaMuunnos.java tietorakenne Valuutat TreeMap-rakenteeksi.
3.
Toimiiko ValuuttaMuunnos.java (ks. demo 11 vastaukset) siten, että sitä voidaan käyttää seuraavasti ja jos voi niin miksi:
Määrä ja valuutta>10 s[RET]
10.00 Skr on 6.00 mk.
Määrä ja valuutta>2[RET]
2.00 Skr on 1.20 mk.
Määrä ja valuutta>[RET]
Kiitos!

4-6.
Kirjoita ohjelma joka toimisi seuraavasti (kiinnitä huomiota siihen, että komentovalikoimaa voidaan ohjelmaan lisätä "kohtuullisen" helposti.
Anna komento>Ynnää 3 4 5[RET]
Tulos on 12.
Anna komento>Isoksi kana[RET]
kana isona on KANA
Anna komento>palindromiko saippuakivikauppias[RET]
Sana "saippuakivikauppias" on palindromi!
Anna komento>Ynnää 2 1[RET]
Tulos on 3.
Anna komento>Yn 2 1[RET]
Tulos on 3.
Anna komento>Yh 2 1[RET]
En tunne komentoa YH!
Anna komento>[RET]
Mallivastauksen Java-versioon tuli mm.
  public interface KomentoRajapinta {
    boolean suorita(String parametrit);
  }


  public static class Ynnaa implements KomentoRajapinta { ...
  public static class Apua implements KomentoRajapinta { ...
  public static class Palindromiko implements KomentoRajapinta { ...
  public static class Isoksi implements KomentoRajapinta { ...


... luokkia Komento ja Komennot (sis. mm. metodin: etsi) ...

  public static void main(String[] args)  {
    Komennot komennot = new Komennot();
    Apua apua = new Apua("komento.txt");

    komennot.add(new Komento("?",apua));
    komennot.add(new Komento("apua",apua));
    komennot.add(new Komento("+",new Ynnaa()));
    komennot.add(new Komento("ynnää",new Ynnaa()));
    komennot.add(new Komento("isoksi",new Isoksi()));
    komennot.add(new Komento("palindromiko",new Palindromiko()));

    String s;

    while ( true ) {
      s = Syotto.kysy("Anna komento");
      if ( s.equals("") ) break;
      komennot.tulkitse(s);
    }

  }

7*.
Vaikket tekisikään tehtävää 4-6, niin lisää siihen Help.java:aa kayttäen avustus. Eli jos et ole tehnyt tehtävää 4-6, niin kirjoita pääohjelma joka ? painamisella tulostaa avustuksen käyttäen Help.java:n metodeja. Ota uusi .jar-tiedosto itsellesi ali-hakemistosta ja tutki Help.javaa. Kirjoita myös alkeellinen avustustiedosto.
8.
Kirjoita luokka Kello jossa on metodi tarkista(String jono), joka tarkistaa onko parametrina viety merkkijono oikeata muotoa kellonajaksi. Jos on vikaa, niin funktio palauttaa merkkijonona vian, muuten null-viitteen.
B1-2
Kirjoita ohjelma, joka kyselee nimiä kunnes annetaan tyhjä rivi ja tulostaa tämän jälkeen nimet aakkosjärjestyksessä. Nimet syötetään muodossa "Aku Ankka", mutta siitä huolimatta ne lajitellaan siten, että "Iines Ankka" < "Hannu Hanhi", eli sukunimen mukaan.
B3.
Lue http://junit.sourceforge.net/doc/cookbook/cookbook.htm
Tee esim. JBuilderillä JUnit yksikkötesti Kello-luokan
testaamiseksi:
1) File/New/Test/Test Case
2) Etsi luokaksi Kello ja sen metodiksi tarkista
3) Vastaile muihin oletukset
4) Muuta luokka seuraavan näköiseksi:

import junit.framework.*;

/**
 * Testiohjelma kellon tarkistamiseksi
 * @author Vesa Lappalainen
 * @version 1.0, 2.04.2005
 */
public class TestKello extends TestCase {
  
   private static final String testi[][] = {
      {"12:23:00.05"   , null},
      {"kissa"         , "Vääriä merkkejä jonossa"},
      {"12:23:"        , null},
      {"12 23"         , "Vääriä merkkejä jonossa"},
      {"12k23"         , "Vääriä merkkejä jonossa"},
      {"12:30"         , null},
      {"25:30"         , "Tunnit väärin"},
      {"12:65"         , "Minuutit väärin"},
      {"12:59:78"      , "Sekunnit väärin"},
      {"12:23:00.0.0"  , "Vääriä merkkejä jonossa"},
      {"12:59:10.1000" , null},
      {"12"            , null},
      {""              , "Jono tyhjä"}
    };


  public void testTarkista() {
    Kello kello = new Kello();
    for (int i=0; i<testi.length; i++ )
      assertEquals("palautus väärin", testi[i][1],
                     kello.tarkista(testi[i][0]));
  }

}

5) Aja testiohjelma ja korjaa tarvittaessa Kello-luokkaasi.
G1-4
Hevosen hyppely. Hevonenhan voi hypätä shakkilaudalla 2 yhteen suuntaan ja yhden toiseen suuntaan. Tee ohjelma joka etsii hevoselle reitin 5x7 laudalla niin, että hevonen käy tasan yhden kerran jokaisessa ruudussa. Vinkkejä: Lauta-luokka, jossa on "ruutu" jokaiselle paikalle. "Ruutuun" tallennetaan monesko hyppy tulee tähän ruutuun. 0 on vapaa ruutu. "Siirtovektori" hevosen mahdollisille hypyille.
K1-2
Alla pieni pala Korpista. Poista turhat olion luonnit. Liittyykö mitenkään varauksiin?

  /**
   * Method that is needed when getting reservationids from tables,
   * compressed values (etc. 1,2,3) are separated to different rows in
   * String array
   * @param arrayWithCommaValues array that has ids separated with commas
   * in one row
   * @return String array in which comma separated values are separated
   */
  public static String[] getSeparatedArray(String[] arrayWithCommaValues) {
    List resList = new ArrayList();
    String[] reservations2 = new String[0];
    if (arrayWithCommaValues != null) {
      for (int i = 0; i < arrayWithCommaValues.length; i++) {
        String[] tmpReservations = arrayWithCommaValues[i].split(",");
        if (tmpReservations != null) {
          for (int j = 0; j < tmpReservations.length; j++) {
            resList.add(tmpReservations[j]);
          }
        }
      }
      reservations2 = new String[resList.size()];
      for (int i = 0; i < resList.size(); i++) {
        reservations2[i] = (String) resList.get(i);
      }
    }
    return reservations2;
  }


GURU-tehtävät

Guruillekin suosittelen tuota 4-7 tehtävää.


HUOM!


Tämä demo (12) on viimeinen kurssin 4 ov:n Java-osuutta koskeva demo. Loput demot (C1 ja C2) ovat 1 op:n C++ "kurssissa" (TIEP112). Lisäksi WWW-osuus (JSP - Java Server Pages) on 1 op:n TIEP113 kurssissa.

Vaiheessa 6 pitää olla tiedostojen lukeminen ja kirjoittaminen sekä luokkien välinen yhteistyö käyttöliittymäluokan puolella.

Vaiheessa 7. täytyy olla valmiina ainakin (sovittava ohjaajan kanssa henkilökohtaisesti)