Created
March 18, 2010 22:08
-
-
Save esamattis/336968 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.io.OutputStream; | |
| import java.io.PrintStream; | |
| import java.util.Iterator; | |
| import java.util.NoSuchElementException; | |
| import fi.jyu.mit.ohj2.*; | |
| /** | |
| * Esimerkki linkitetystä listasta. | |
| * @author Vesa Lappalainen | |
| * @version 1.0, 15.03.2003 | |
| * | |
| * @author Tiina Mononen | |
| * @version 1.1, 18.03.2010 | |
| */ | |
| public class KouluIteraattori { | |
| /** | |
| * Luokan yksi oppilas | |
| */ | |
| public static class Oppilas { | |
| private final String nimi; | |
| private final double keskiarvo; | |
| private Oppilas seuraava; | |
| /** | |
| * Alustetaan oppilaan tiedot | |
| * @param nimi oppilaan nimi | |
| * @param keskiarvo oppilaan keskiarvo | |
| */ | |
| public Oppilas(String nimi, double keskiarvo) { | |
| this.nimi = nimi; this.keskiarvo = keskiarvo; | |
| } | |
| /** | |
| * Palautetaan oppilaan tiedot merkkijonona | |
| * @return oppilaan tiedot merkkijonona | |
| */ | |
| @Override | |
| public String toString() { | |
| return Mjonot.fmt(nimi,-22) + " keskiarvo: " + Mjonot.fmt(keskiarvo,5,2); | |
| } | |
| /** | |
| * @return seuraava oppilas | |
| */ | |
| public Oppilas getSeuraava(){ | |
| return seuraava; | |
| } | |
| /** | |
| * Asetetaan tieto seuraavasta oppilaasta | |
| * @param seuraava seuraava oppilas | |
| */ | |
| public void setSeuraava(Oppilas seuraava){ | |
| this.seuraava=seuraava; | |
| } | |
| } | |
| /** | |
| * Iteraattori luokka | |
| * @author Tiina Mononen | |
| * @version 1.0, 18.03.2010 | |
| */ | |
| public class OppilasIterator implements Iterator{ | |
| private Oppilas kohdalla; | |
| /** | |
| *luodaan uusi iteraattori ilman parametrejä | |
| */ | |
| public OppilasIterator(){ | |
| kohdalla= new Oppilas("nimi", 0); | |
| kohdalla.setSeuraava(ensimmainen); | |
| } | |
| /** | |
| * Tarkistaa onko seuraavaa oppilasta jäljellä | |
| * @return true, jos on | |
| */ | |
| public boolean hasNext(){ | |
| return kohdalla.getSeuraava()==null; | |
| } | |
| /** | |
| * Palauttaa seuraavan olion | |
| * @return seuraava olio | |
| */ | |
| public Object next()throws NoSuchElementException{ | |
| if (hasNext()==false) throw new NoSuchElementException("Ei ole enempää oppilaita."); | |
| kohdalla=kohdalla.getSeuraava(); | |
| return kohdalla; | |
| } | |
| /** | |
| * Poist metodi ei ole käytössä | |
| * @throws UnsupportedOperationException jos yritetään poistaa | |
| */ | |
| public void remove() throws UnsupportedOperationException{ | |
| throw new UnsupportedOperationException("Poisto ei ole käytössä"); | |
| } | |
| } | |
| private final String luokka; | |
| private int oppilaita; | |
| private Oppilas ensimmainen; | |
| private Oppilas viimeinen; | |
| /** | |
| * Alustetaan luokka | |
| * @param luokka luokan nimi | |
| */ | |
| public KouluIteraattori(String luokka) { this.luokka = luokka; } | |
| /** | |
| * Antaa uuden iteraattorin oppilaiden läpikäymiseen | |
| * @return antaa iteraattorin | |
| */ | |
| public Iterator iterator(){ | |
| return new OppilasIterator(); | |
| } | |
| /** | |
| * Lisätään uusi oppilas | |
| * @param oppilas lisättävän oppilaan tiedot | |
| * @example | |
| * <pre name="test"> | |
| * #import java.io.ByteArrayOutputStream; | |
| * #CLASSIMPORT | |
| * ByteArrayOutputStream bs = new ByteArrayOutputStream(); | |
| * String alku = "%n%nLuokka: 1b oppilaita: %d%n" + | |
| * "==========================================%n"; | |
| * String loppu = "==========================================%n"; | |
| * String t = ""; | |
| * | |
| * KouluIteraattori luokka = new KouluIteraattori("1b"); | |
| * | |
| * luokka.lisaa(new KouluIteraattori.Oppilas($nimi,$ka)); | |
| * luokka.tulosta(bs); | |
| * bs.toString() === String.format(alku+($oppilaat)+loppu,$maara); bs.reset(); | |
| * | |
| * $nimi | $ka | $maara | $oppilaat | |
| * ------------------------------------------------------------------------------- | |
| * --- | --- | 0 | t="" | |
| * "Ankka Aku" | 5.0 | 1 | t+="Ankka Aku keskiarvo: 5.00%n" | |
| * "Ankka Tupu" | 7.0 | 2 | t+="Ankka Tupu keskiarvo: 7.00%n" | |
| * "Hiiri Mikki" | 9.0 | 3 | t+="Hiiri Mikki keskiarvo: 9.00%n" | |
| * | |
| * | |
| * luokka.poistaKaikki(); | |
| * | |
| * luokka.lisaa(new KouluIteraattori.Oppilas($nimi,$ka)); // NOPMD | |
| * luokka.tulosta(bs); | |
| * bs.toString() === String.format(alku+($oppilaat)+loppu,$maara); bs.reset(); | |
| * $nimi | $ka | $maara | $oppilaat | |
| * ------------------------------------------------------------------------------- | |
| * --- | --- | 0 | t="" | |
| * "Hiiri Mikki" | 9.0 | 1 | t+="Hiiri Mikki keskiarvo: 9.00%n" | |
| * | |
| * </pre> | |
| */ | |
| public void lisaa(Oppilas oppilas) { | |
| if (ensimmainen==null){ | |
| ensimmainen=oppilas; | |
| } | |
| else viimeinen.setSeuraava(oppilas); | |
| viimeinen=oppilas; | |
| oppilaita++; | |
| } | |
| /** | |
| * Tulostetaan luokan tiedot tietovirtaan. | |
| * @param os tietovirta johon tulostetaan | |
| */ | |
| public void tulosta(OutputStream os) { | |
| PrintStream out = new PrintStream(os); | |
| out.println(); | |
| out.println(); | |
| out.println("Luokka: " + luokka + " oppilaita: " + oppilaita); | |
| out.println("=========================================="); | |
| out.println(ensimmainen); | |
| if (ensimmainen!=null){ | |
| for (Iterator i=iterator(); i.hasNext();){ | |
| Oppilas oppilas=(Oppilas)i.next(); | |
| out.println(oppilas); | |
| } | |
| } | |
| out.println("=========================================="); | |
| } | |
| /** | |
| * Poistetaan kaikki luokan oppilaat | |
| */ | |
| public void poistaKaikki() { | |
| ensimmainen=null; | |
| viimeinen=null; | |
| oppilaita=0; | |
| } | |
| /** | |
| * Testataan luokkaa | |
| * @param args ei käytössä | |
| */ | |
| public static void main(String[] args) { | |
| KouluIteraattori luokka = new KouluIteraattori("1b"); | |
| luokka.lisaa(new Oppilas("Ankka Aku",5.0)); | |
| luokka.lisaa(new Oppilas("Ankka Tupu",7.0)); | |
| luokka.lisaa(new Oppilas("Hiiri Mikki",9.0)); | |
| luokka.tulosta(System.out); | |
| luokka.poistaKaikki(); | |
| luokka.tulosta(System.out); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment