package valinta; import fi.jyu.mit.ohj2.*; /** * Luokka äänestyksen vaihtoehdoille * @author Vesa Lappalainen * @version 1.0, 27.02.2003 */ public class Vaihtoehdot { private Valinta alkiot[]; private int lkm = 0; /** * Alustetaan vaihtoehtojen lukumäärä * @param maxKoko maksimimäärä vaihtoehtoja */ public Vaihtoehdot(int maxKoko) { alkiot = new Valinta[maxKoko]; } /** * Kysytään K/e kysymys Jatketaanko * @return true jos käyttäjä painaa K tai k */ public static boolean jatketaan() { char c; System.out.println("Jatketaanko (K/e):"); c = IO.odota_nappain("KE", 'K', IO.MERKKI_ISOKSI); System.out.println("" + c); return (c == 'K'); } /** * Lisää uusi valinta. * @param uusi lisättävä valinta */ public void lisaa(Valinta uusi) { if ( lkm >= alkiot.length ) return; // Jotakin hienompaa alkiot[lkm] = uusi; lkm++; } /** * Tulostetaan äänestystilanne */ private void tulostaAanet() { System.out.println("Tilanne: "); for (int i = 0; i < lkm; i++) System.out.println(Mjonot.fmt(alkiot[i].getTeksti(), -10) + ": " + alkiot[i].getMaara() + " "); } // #PACKAGEIMPORT /** * Etsitään valittua kohdetta kirjaimen perusteella * @param painettu etsittävän kohteen kirjain * @return löydetty kohde tai null jos ei löydy * * @example *
     * Vaihtoehdot vaihtoehdot = new Vaihtoehdot(3);
     * vaihtoehdot.lisaa(new Valinta('K',"Kyllä"));
     * vaihtoehdot.lisaa(new Valinta('E',"Ei"));
     * vaihtoehdot.lisaa(new Valinta('H',"Ehkä"));
     * vaihtoehdot.etsi('K').getTeksti() === "Kyllä";
     * vaihtoehdot.etsi('E').getTeksti() === "Ei";
     * vaihtoehdot.etsi('H').getTeksti() === "Ehkä";
     * vaihtoehdot.etsi('k') === null;
     * 
*/ public Valinta etsi(char painettu) { for (int i = 0; i < lkm; i++) if ( alkiot[i].getKirjain() == painettu ) return alkiot[i]; return null; } /** * Tulostetaan äänestyskohteet ja odotetaan käyttäjän painallusta * @return käyttäjän painama äänestyskohde */ private char tulostaMenuJaOdota() { String sallitut = ""; char oletus = alkiot[0].getKirjain(); for (int i = 0; i < lkm; i++) { String tulostus = alkiot[i].getTulostus(); System.out.println(" " + tulostus); sallitut = sallitut + alkiot[i].getKirjain(); } System.out.print(" :"); return IO.odota_nappain(sallitut, oletus, IO.MERKKI_ISOKSI); } /** * Äänestyssilmukka, josta poistutaan kun käyttäjä ei halua enää jatkaa * @param alkuteksti Ennen äänestystä tulostettava teksti * @param toteamus kunkin äänestyksen jälkeen tulostettava teksti */ public void aanesta(String alkuteksti, String toteamus) { do { System.out.println(alkuteksti); System.out.println(""); System.out.println("Valitse:"); char painettu = tulostaMenuJaOdota(); Valinta val = etsi(painettu); if ( val == null ) return; // tähän jotakin fiksumpaa System.out.println(""); System.out.println(toteamus + " " + val.getTeksti()); val.lisaa(); tulostaAanet(); } while ( jatketaan() ); } /** * Testataan Vaihtoehdot-luokkaa * @param args ei käytössä */ public static void main(String[] args) { Vaihtoehdot valinnat = new Vaihtoehdot(10); /* valinnat.lisaa(new Valinta('K',"Kyllä")); valinnat.lisaa(new Valinta('E',"Ei")); valinnat.lisaa(new Valinta('O',"EOS")); valinnat.aanesta("Onko ohjelmointi kivaa","Äänestit siis"); */ valinnat.lisaa(new Valinta('T', "Tyttö")); valinnat.lisaa(new Valinta('P', "Poika")); valinnat.lisaa(new Valinta('N', "Nainen")); valinnat.lisaa(new Valinta('M', "Mies")); valinnat.aanesta("Mitä sukupuolta olet", "Olet siis"); System.out.println("Kiitos vastauksista! Hei hei!"); } }