Skip to content

Instantly share code, notes, and snippets.

@esamattis
Created March 18, 2010 22:07
Show Gist options
  • Select an option

  • Save esamattis/336967 to your computer and use it in GitHub Desktop.

Select an option

Save esamattis/336967 to your computer and use it in GitHub Desktop.
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