wiki:ohj2k10vk1T3
Last modified 8 years ago Last modified on 2010-04-24 12:29:19

Pisteitä sai seuraavasti:

  • Opiskelija-luokan toteutus (toteuttaa Jasen-rajapinnan) 1p,
  • Ainejarjesto-luokan toteuttaminen tarvittavine metodeineen (konstruktori,lisäys,rajapinnan toteutus ja toString()) 2p
  • Kommentointi 0,5p
  • poikkeusten käsitteleminen (pääasiassa jäsenten lisäämisessä taulukkoon) 0,5p
  • tietorakenteissa pisteitä sai jos oli piirtänyt oliot omiksi rakenteikseen, muistanut attribuutit ja viitteet

Yleisiä virheitä:

jasenet-taulukon alustaminen ja sen mahdollinen täyttyminen oli jäänyt monilta huomaamatta. Lisäksi rajapinnan toteuttaminen oli unohtunut monilta. Ongelmia tuotti myös olion tulostaminen ja moni tulostikin toString-metodin sisällä.

Tietorakennekuvissa oli unohdettu esittää olioiden attribuutteja, viitteitä jasenet-taulukkoon ja sitä tosiasiaa. että toisessa kuvassa Miinus oli Linksuttimen jäsen.

Ainejarjesto-luokka

/**
* Ainejärjestö luokka. Sisältää jäseniä
* @author tekijä
*
*/

public class Ainejarjesto implements Jasen {

private String nimi;
private Jasen[] jasenet;
private int lkm = 0;

/**
* Alustaja järjestölle
*/
public Ainejarjesto(String nimi) {
this.nimi = nimi;
this.jasenet = new Jasen[3];
}

/**
* Lisää jäsenen järjestöön
* @param jasen lisättävä jäsen
*/
public void lisaaJasen(Jasen jasen) {
if (lkm >= jasenet.length) kasvataTaulukkoa();
jasenet[lkm++] = jasen;
}

/**
* Palauttaa järjestön tiedot
* @return järjestön tiedot
*/
public String annaNimesi() {return nimi;}

    /**
     *Palauttaa olion tekstimuodossa
     *@return olio tekstinä
     */
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(nimi); sb.append("\n");
sb.append("jäseniä "); sb.append(lkm); sb.append("\n");

for (int i = 0; i < lkm; i++) {
sb.append(jasenet[i].annaNimesi()); sb.append("\n");
}

return sb.toString();

}

/**
* Kasvattaa taulukkoa kaksinkertaiseksi edelliseen verrattuna ja
* kopioi vanhan taulukon alkiot siihen sekä muuttaa viitteen vanhasta
* taulukosta uuteen
*/
private void kasvataTaulukkoa() {
Jasen[] tmp = new Jasen[jasenet.length*2];

for (int i = 0; i < jasenet.length; i++) {
tmp[i] = jasenet[i];
}

jasenet = tmp;
}

/**
* Testipääohjelma
* @param args ei käytössä
*/
public static void main(String[] args) {
Ainejarjesto linksutin = new Ainejarjesto("Linksutin");
Ainejarjesto miinus = new Ainejarjesto("Miinus");

//Piirrä kuva tietorakenteesta
System.out.println(linksutin);

linksutin.lisaaJasen(new Opiskelija("Mikko"));
linksutin.lisaaJasen(new Opiskelija("Ansku"));
linksutin.lisaaJasen(new Opiskelija("Sauli"));
linksutin.lisaaJasen(new Opiskelija("Eetu")); 
linksutin.lisaaJasen(miinus);

//Piirrä kuva tietorakenteesta
System.out.println(linksutin);
}
}

Opiskelija-luokka:


/**
* Opiskelija luokka, sisältää opiskelijan tiedot
* @author tekijä
*
*/
public class Opiskelija implements Jasen {
private String nimi;

/**
* Alustaja jäsenelle
* @param nimi jäsenen nimi
*/
public Opiskelija(String nimi) {
this.nimi = nimi;
}

/**
* Palauttaa jäsenen nimen
* @return jäsenen nimi
*/
public String annaNimesi() {return nimi;}
}

valmiiksi annettu rajapinta:

public interface Jasen {
public String annaNimesi();
}

kuvat tietorakenteesta:

1)

           +---------+
   nimi    |Linksutin|
   lkm     |    0    |
   jasenet |    +    |
           +----|----+
                |         
                |    +----+
   jasen[0]     +--->|    |
                     +----+
   jasen[1]          |    +
                     +----+
   jasen[2]          |    +
                     +----+
                     
           +---------+
   nimi    |Miinus   |
   lkm     |    0    |
   jasenet |    +    |
           +----|----+
                |         
                |    +----+
   jasen[0]     +--->|    |
                     +----+
   jasen[1]          |    +
                     +----+
   jasen[2]          |    +
                     +----+

2)

           +---------+
   nimi    |Linksutin|
   lkm     |    5    |
   jasenet |    +    |
           +----|----+
                |         
                |    +----+                      +-----+                  
   jasen[0]     +--->| +------------------------>|Mikko|                 
                     +----+                      +-----+                   
   jasen[1]          | +---------------------+                      
                     +----+                  |   +-----+                  
   jasen[2]          | +------------------+  +-->|Ansku|                     
                     +----+               |      +-----+                      
   jasen[3]          | +---------------+  |                        
                     +----+            |  |      +-----+                
   jasen[4]          | +------------+  |  +----->|Sauli|            
                     +----+         |  |         +-----+               
                                    |  |
                                    |  |         +----+
                                    |  +-------->|Eetu|
                                    |            +----+'
                                    |
                                    |            +------+
                                    +----------->|Miinus|
                                                 |  0   |
                                                 |  +   |
                                                 +--|---+
                                                    |
                                                    |        +----+
                                                    +------->|    |
                                                             +----+
                                                             |    +
                                                             +----+
                                                             |    +
                                                             +----+