ymmällään tökkii Henkilotunnus-luokka on OK
Miksi en voi testiluokassa(alla) suoraan tulostaa sPaiva muuttujaa? testi3 luokan viimeinen rivi
import java.util.*;
import java.util.regex.*;
public class Henkilotunnus extends Tunnus
{
private Calendar SyntymaAika = null;
private String Hetu = null;
/**
* Oletusmuodostin.
*
* @param sTunnus Henkilotunnus muotoa "ppkkvv[ -]tttt".
*/
public Henkilotunnus(String sTunnus)
{
if (!onOikein(sTunnus))
throw new IllegalArgumentException("Henkilötunnus ei ole oikein: " sTunnus);
String sPaiva = sTunnus.substring(0, 2);
String sKuukausi = sTunnus.substring(2, 4);
String sVuosi = sTunnus.substring(4, 6);
char chErotin = sTunnus.charAt(6);
if (chErotin == ' ')
sVuosi = "18" sVuosi;
else if (chErotin == '-')
sVuosi = "19" sVuosi;
else
sVuosi = "20" sVuosi;
GregorianCalendar cal = new GregorianCalendar(
Integer.parseInt(sVuosi),
Integer.parseInt(sKuukausi) - 1,
Integer.parseInt(sPaiva));
this.SyntymaAika = cal;
this.Hetu = sTunnus;
}
/**
* Tarkistaa, onko merkkijonona annettu henkilötunnus oikein.
*
* @param sTunnus Tutkittava tunnus.
*
* @return True, jos tunnus oli oikein, false muutoin.
*/
public static boolean onOikein(String sTunnus)
{
return(Pattern.matches("\\d{6}[ -]\\d{3}\\w{1}", sTunnus));
}
/**
* Palauttaa henkilötunnuksen.
*
* @return Tunnus.
*/
public String kysyKaikki()
{
return(this.Hetu);
}
/**
* Palauttaa henkilötunnuksen merkkijonomuodossa.
*
* @return Henkilötunnus.
*/
public String toString()
{
return("Henkilotunnus(" this.Hetu ")");
}
}
import java.util.*;
import java.util.regex.*;
public class Testi3
{
public static void main(String[] args)
{
System.out.println("Anna henkilötunnus! ");
String henkilotunnusTesti = Lue.rivi();
System.out.println(Henkilotunnus.onOikein(henkilotunnusTesti));
Henkilotunnus tamaTunnus = new Henkilotunnus(henkilotunnusTesti);
System.out.println(tamaTunnus.kysySyntymaAika());
System.out.println(tamaTunnus.kysyKaikki());
System.out.println(sPaiva); //miksei tämä toimi näin????????????????????????
}
}
tökkii perusteellisesti
5
596
Vastaukset
- Piru
koko Testi3-luokassa ei ole tuollaista sPaiva-muuttujaa edes määritelty, niin miksi sen pitäisi osata se tulostaa? Main-metodi on vielä itse luokasta irrallinen metodi, niin tuo sPaiva pitäisi olla main-metodissa esitelty muuttuja. Näin tuo koodi toimisi.
public class Testi3
{
public static void main(String[] args)
{
String sPaiva="";
System.out.println("Anna henkilötunnus! ");
String henkilotunnusTesti = Lue.rivi();
System.out.println(Henkilotunnus.onOikein(henkilotunnusTesti));
Henkilotunnus tamaTunnus = new Henkilotunnus(henkilotunnusTesti);
System.out.println(tamaTunnus.kysySyntymaAika());
System.out.println(tamaTunnus.kysyKaikki());
System.out.println(sPaiva); //miksei tämä toimi näin????????????????????????
}
}
Oletan kuitenkin että haluaisit tulostaa sPaiva-muuttujan sisällön Henkilotunnus-luokasta. Sitä voisit toki kutsua näin:
System.out.println(tamaTunnus.sPaiva);
mutta silloin tuo muuttuja pitäisi olla määriteltynä julkiseksi Henkilotunnus-luokan alussa näin:
public class Henkilotunnus extends Tunnus
{
private Calendar SyntymaAika = null;
private String Hetu = null;
public String sPaiva = "";
Tällä hetkellä se on määriteltynä vain Henkilotunnus-luokan konstruktorin sisällä. Muualla se ei ole voimassa.
Lopuksi vielä neuvoisin, että et käytä julkisia muuttujia luokissasi kuin ihan pakosta. Julkisia muuttujia pääsee kuka vain sorkkimaan ja ehkä tunkemaan niihin ties mitä arvoiksi.
Määrittele muuttujat privaateiksi ja tee niiden käsittelyyn julkiset metodit. Näissä metodeissa sitten voi tarkistaa, että varmasti laitetaan muuttujaan oikeaa tietoa.
Esim.
public class Kuukaudet
{
private int kuukausi=0;
public Kuukaudet()
{
this.kuukausi = 1;
}
public int getKuukausi()
{
return this.kuukausi;
}
public void setKuukausi(int kk)
{
//tarkistetaan annetun kuukauden laillisuus
if(kk>0 && kk- samaHarjoituksentekija
kiitoksia ehkä tämä tästä
haluaisin allaolevan tarkistuksen osaksi tuon äskeisen Henkilötunnus-luokan onOikea-metodia
jokin tässä private-public- konstruktori asiassa ei ole auennut minulle ainakaan vielä
eli miten?
private final static char[] TARKISTUSMERKKI =
{'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','H','J','K','L',
'M','N','P','R','S','T','U','V','W','X','Y'};
String sJaettava = sTunnus.substring(0, 6) sTunnus(7, 10);
int iJaettava = Integer.parseInt(sJaettava);
int iJakojaannos = iJaettava1;
boolean bOk = =(TARKISTUSMERKKI[iJakojaannos]== sTunnus.charAt(10)); - samaHarj
samaHarjoituksentekija kirjoitti:
kiitoksia ehkä tämä tästä
haluaisin allaolevan tarkistuksen osaksi tuon äskeisen Henkilötunnus-luokan onOikea-metodia
jokin tässä private-public- konstruktori asiassa ei ole auennut minulle ainakaan vielä
eli miten?
private final static char[] TARKISTUSMERKKI =
{'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','H','J','K','L',
'M','N','P','R','S','T','U','V','W','X','Y'};
String sJaettava = sTunnus.substring(0, 6) sTunnus(7, 10);
int iJaettava = Integer.parseInt(sJaettava);
int iJakojaannos = iJaettava1;
boolean bOk = =(TARKISTUSMERKKI[iJakojaannos]== sTunnus.charAt(10));muutos vain onOikea-metodiin
(huolimattomuusvirheitä oli edellisessä paljon, stressi painaa
public static boolean onOikein(String sTunnus)
{
String sJaettava = sTunnus.substring(0, 6) sTunnus.substring(7, 10);
int iJaettava = Integer.parseInt(sJaettava);
int iJakojaannos = iJaettava1;
boolean bOk =(TARKISTUSMERKKI[iJakojaannos]== sTunnus.charAt(10));
return(Pattern.matches("\\d{6}[ -]\\d{3}\\w{1}", sTunnus)&&bOk);
} - SivullinenZZZ
samaHarj kirjoitti:
muutos vain onOikea-metodiin
(huolimattomuusvirheitä oli edellisessä paljon, stressi painaa
public static boolean onOikein(String sTunnus)
{
String sJaettava = sTunnus.substring(0, 6) sTunnus.substring(7, 10);
int iJaettava = Integer.parseInt(sJaettava);
int iJakojaannos = iJaettava1;
boolean bOk =(TARKISTUSMERKKI[iJakojaannos]== sTunnus.charAt(10));
return(Pattern.matches("\\d{6}[ -]\\d{3}\\w{1}", sTunnus)&&bOk);
}Se Henkilotunnus-luokan poikkeus pitäisi käsitellä siellä tsetissä jotenkin.
muuten kai OK!
- mikrotukihenkilo
> public static boolean onOikein(String sTunnus)
> "\\d{6}[ -]\\d{3}\\w{1}"
Ei tunnista 2000-luvulla syntyneitä, joiden hetun erotinmerkki on 'A'.
>* Oletusmuodostin.
>* @param sTunnus Henkilotunnus muotoa "ppkkvv[ -]tttt".
Oletusmuodostimella ei ole parametreja.
> System.out.println(sPaiva); //miksei tämä toimi näin????????????????????????
Missä sPaiva on määritelty?
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
en vaan saa häntä pois
Mielestäni pyörimästä. Onko kellekään toiselle käynyt näin? Ihastuin pakkomielteisesti noin vuosi sitten erääseen naiseen. Ei vaan katoa mielestä va1762099Suomi24 kysely: ihmisten kuplautumista ei pääosin koeta vakavaksi ongelmaksi
“Kuplautumista on mahdotonta estää. Ihmiset ovat aina viihtyneet samankaltaiset arvot ja maailmankatsomuksen jakavassa seurassa ja muodostaneet sen pe361741Ohhoh! Glamourmalli Elena, 29, teetti tiimalasivartalon - Vei rahaa ja tuotti tuskaa - Katso kuvat!
Transtaustainen glamourmalli Elena Vikström on käynyt vuosien ajan plastiikkakirurgisissa toimenpiteissä. Tästä näet lopputuloksen: https://www.suomi101441Ostiko Martina uuden ponin tyttärelleen, vai oliko myös Stefan itsekkin valitsemassa ponia .?
Kiva kun on tyttärelle mielekäs harrastus annettu, ehkä vielä on tulevaisuudessa hänelle tärkeä ja valitsee sen perusteella tulevan ammatin.2311228Sinä olet tärkeä
Herätät minussa kunnioitusta. Kiehdot minua. En oikein saa kiinni sinusta. Ehkä juuri siksi. Aistin että sinäkin pidät minusta. Vetovoima on ollut alu601212Varisjärvellä mersu.
Varisjärven tiellä tuli vanhamersu kylkiedellä mutkassa vastaan ja vähällä keulaan mutta tökkäs penkkaan, hyppäsin omasta autosta ulos ja kävin kiskas161060Belorf haistattaa seuraajiaan "You can hate me now"...
Vai haistattaako lompakkoa, joka taisi viimeinkin ymmärtää häipyä Sofian ulottumattomiin ? Sofia raukka on niin typerä, että ottaa nostetta "omasta tv58972- 60969