tökkii perusteellisesti

Harjoituksentekijä

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????????????????????????

}
}

5

596

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. 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ä va
      Ikävä
      176
      2099
    2. Suomi24 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 pe
      Suomi24 Blogi ★
      36
      1741
    3. Ohhoh! 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.suomi
      Kotimaiset julkkisjuorut
      10
      1441
    4. Ostiko 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.
      Kotimaiset julkkisjuorut
      231
      1228
    5. Sinä 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 alu
      Ihastuminen
      60
      1212
    6. Varisjä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 kiskas
      Suomussalmi
      16
      1060
    7. Belorf 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 tv
      Kotimaiset julkkisjuorut
      58
      972
    8. Mitähän ajattelet J

      Tästä kaikesta? Mä välitän susta oikeasti.
      Ikävä
      60
      969
    Aihe