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
587
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
Räppäri kuoli vankilassa
Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "874098Välillä kyllä tuntuu, että jaat vihjeitä
Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella242911No kyllä te luuserit voitte tehdä mitä vaan keskenänne, sitä en ymmärrä miksi pelaat,nainen
Pisteesi silmissäni, edes ystävätasolla tippui jo tuhannella, kun sain selville pelailusi, olet toisen kanssa, vaikka ol452320- 341321
- 10909
- 131885
- 6874
Masan touhut etenee
Punatiilitalon tietotoimiston mukaan Masa on saanut viimein myytyä kämppänsä ja kaavoittaa uudelle lukaalille tonttia pa12822Naisten ja miesten tasoeroista
Oletteko huomanneet, että naisissa ylemmän tason naiset ovat sinkkuja, ja miehissä alemman tason incelit? Toimivat paris124766- 11760