Yritän tehdä henkilörekisteriä HashMappina. Tämä toimii mutta ei vastaa tavoitteitani. Pitäisi olla oma metodi jolla esim vaihdetaan nimi avioon mennessä. Pitäisikö HashMapin olla oma luokkansa?
Entä Switch valinta tässä näiden toimintojen edessä?
class Sairaankuljettaja
{
private String psNimi;
private String psHenkilotunnus;
private String psValmistumisvuosi;
public Sairaankuljettaja(String sNimi, String sHenkilotunnus, String sValmistumisvuosi)
{
psNimi=sNimi;
psHenkilotunnus=sHenkilotunnus;
psValmistumisvuosi=sValmistumisvuosi;
}
public String toString()
{
return psNimi " " psHenkilotunnus " " psValmistumisvuosi;
}
}
import java.util.*;
class Rekisteri
{
String shenkiloNro;
Sairaankuljettaja uusiSairKu;
static HashMap rekisteri = new HashMap();
public static void main(String args[])
{
do
{
System.out.println("Anna Henkilönumero: ");
String shenkiloNro= Lue.rivi();
if (shenkiloNro.length() == 0)
break;
System.out.println("Anna uuden sairaankuljettajan nimi: ");
String sNimi = Lue.rivi();
System.out.println("Anna uuden sairaankuljettajan henkilötunnus: ");
String sHenkilotunnus = Lue.rivi();
System.out.println("Anna uuden sairaankuljettajan valmistumisvuosi: ");
String sValmistumisvuosi= Lue.rivi();
Sairaankuljettaja uusiSairKu = new Sairaankuljettaja(sNimi, sHenkilotunnus, sValmistumisvuosi);
rekisteri.put(shenkiloNro, uusiSairKu);
} while(true);
System.out.println(rekisteri);
System.out.println();
System.out.println("Anna Henkilönumero niin tulostan tiedot: ");
String hloNro= Lue.rivi();
System.out.println(Rekisteri.rekisteri.get("0001"));
System.out.println();
Iterator iter = ((Set)rekisteri.entrySet()).iterator();
while (iter.hasNext())
{
Map.Entry alkio = (Map.Entry)iter.next();
String avain = (String)alkio.getKey();
Sairaankuljettaja arvo=(Sairaankuljettaja)alkio.getValue();
System.out.println("Avain on " avain " ja arvo on " arvo);
}
}
}
Entä Switch valinta tässä näiden toimintojen edessä?
class Sairaankuljettaja
{
private String psNimi;
private String psHenkilotunnus;
private String psValmistumisvuosi;
public Sairaankuljettaja(String sNimi, String sHenkilotunnus, String sValmistumisvuosi)
{
psNimi=sNimi;
psHenkilotunnus=sHenkilotunnus;
psValmistumisvuosi=sValmistumisvuosi;
}
public String toString()
{
return psNimi " " psHenkilotunnus " " psValmistumisvuosi;
}
}
import java.util.*;
class Rekisteri
{
String shenkiloNro;
Sairaankuljettaja uusiSairKu;
static HashMap rekisteri = new HashMap();
public static void main(String args[])
{
do
{
System.out.println("Anna Henkilönumero: ");
String shenkiloNro= Lue.rivi();
if (shenkiloNro.length() == 0)
break;
System.out.println("Anna uuden sairaankuljettajan nimi: ");
String sNimi = Lue.rivi();
System.out.println("Anna uuden sairaankuljettajan henkilötunnus: ");
String sHenkilotunnus = Lue.rivi();
System.out.println("Anna uuden sairaankuljettajan valmistumisvuosi: ");
String sValmistumisvuosi= Lue.rivi();
Sairaankuljettaja uusiSairKu = new Sairaankuljettaja(sNimi, sHenkilotunnus, sValmistumisvuosi);
rekisteri.put(shenkiloNro, uusiSairKu);
} while(true);
System.out.println(rekisteri);
System.out.println();
System.out.println("Anna Henkilönumero niin tulostan tiedot: ");
String hloNro= Lue.rivi();
System.out.println(Rekisteri.rekisteri.get("0001"));
System.out.println();
Iterator iter = ((Set)rekisteri.entrySet()).iterator();
while (iter.hasNext())
{
Map.Entry alkio = (Map.Entry)iter.next();
String avain = (String)alkio.getKey();
Sairaankuljettaja arvo=(Sairaankuljettaja)alkio.getValue();
System.out.println("Avain on " avain " ja arvo on " arvo);
}
}
}
Vastaukset 4
Vanhimmat
Itse loisin ainakin ehkä seuraavat luokat: Nimi, Henkilö ja Hetu, HenkilöRekisteri, KäyttöLiittymä ja PääOhjelma. Käytä toki Java:n uusi ominaisuuksia hyväksi eli luo se HashMap niin että siihen tulee tyyppi tarkastus mukaan eli:
HashMap kuskit = new HashMap();
Eikös HashSet olisi parempi valinta vai onko jokin tietty syy tuon HashMap:n käyttöön? Jos et tiedä kovin hyvin hash:n toiminta periaatetta niin silloin kannattaa käyttää sitä String luokaa edelleen Hetu luokan sijaan. Mistä muuten löydän tuon "Lue" paketin, vai onko sellaista edes olemassa? (olen vain huomannut että jonkun muunkin koodissa on esiintynyt tuollainen luku rivi).
Mitä jos liittäisit sen hetun henkilön tietoihin mukaan. Ja tekisi vaikka seuraavan kaltaisen rekisteri luokan:
public class HenkilöRekisteri extends HashMap {
public HenkilöRekisteri() {
super();
}
public Henkilö get(Henkilö henkilö) {
return get(henkilö.annaHetu());
}
public Henkilö get(String hetu) {
return get(new Hetu(hetu));
}
public Henkilö put(Henkilö henkilö) {
return put(henkilö.annaHetu(), henkilö);
}
}
Lue on Arto Wiklan laatima luokka, joka on yleisessä käytössä useissa oppilaitoksissa. Löytyy varmaan googlella.
Kiitos, pitää etsiä. Sitä vähän ajattelinkin että olisi jossain kouluissa käytössa.
Minulla on koneella Lue-luokka ja Kirjoita luokka, muuta en tiedä onko lupa laittaa niitä nettiin. Ne voi imuroida yliopistojen tietojenkäsittelytieteen laitosten kotisivuilta.