Suomi24 Keskustelussa on viikonlopun aikana ollut poikkeuksellisen paljon bottien automaattiseti luomia kommentteja. Pahoittelemme tästä aiheutunutta harmia. Olemme kiristäneet Keskustelujen suojausasetuksia ja kommentointi on toistaiseksi estetty ulkomailta.

mikä tässä on väärin

miten luokka saadaan "...

Ongelma: Miten ohjelma saadaan käyttämään toista luokkaa?

Esimerkki on Java-ohjelmointi kirjasta
Ohjelma (class TeemuJaTiina), joka käyttää Henkilo-luokkaa

import java.util.Random;

public class Henkilo {
private final String hetu;
private String nimi;
private int ikä = 0; //Kuukausina
private float pituus = 0.0F;
private Henkilo puoliso;
private Random geenit = new Random();

public Henkilo(String hetu) {
this.hetu = hetu;
}

public String getHetu() { return hetu; }
public void setNimi(String uNimi) { nimi = uNimi; }
public String getNimi() { return nimi; }
public float getPituus() { return pituus; }
public Henkilo getPuoliso() { return puoliso; }
public int getIkäVuosina() { return ikä/12; }

public void vanhene() { ikä ; }

public float kasva() {
vanhene();
float kasvu = geenit.nextFloat();
pituus = kasvu;
return kasvu;
}

public void avioidu(Henkilo h) {
//Varmistetaan, että kumpikaan osapuoli ei ole naimisissa.
h.eroa(); //Kutsutaan metodia parametrina saadulta oliolta.
eroa(); //Kutsutaan tämän olion eroa-metodia.
//Mennään naimisiin. Asetetaan attribuutti
//puoliso viittaamaan parametrina saatuun olioon.
puoliso = h;
//Asetetaan parametrina saadun olion attribuutin puoliso arvoksi
//viite tähän olioon.
h.puoliso = this;
}

public void eroa() {
//Suoritetaan, jos attribuutti puoliso ei ole tyhjä viite
if ( puoliso != null ) {
//Asetetaan puoliso-attribuutin viittaaman Henkilo-olion
//puoliso-attribuutin arvoksi tyhjä viite.
puoliso.puoliso = null;
//Nyt puolisolla ei ole puolisoa.
//Tyhjennetään vielä viite puolisoon.
puoliso = null;
}
}
}


/**
* Esimerkki Henkilo-luokan käytöstä ohjelmassa.
* @author Mika Vesterholm 2005-11-27
*/
public class TeemuJaTiina {
public static void main(String[] args) {
Henkilo teemu = new Henkilo("111111-1111");
teemu.setNimi("Teemu");
teemu.kasva();
tulostaHenkilo(teemu);
Henkilo tiina = new Henkilo("222222-2222");
tiina.setNimi("Tiina");
tiina.kasva(); tiina.kasva();
tulostaHenkilo(tiina);
teemu.avioidu(tiina);
tulostaHenkilo( tiina.getPuoliso() );

//Pähkinän ratkaisu.

//Seuraavan kutsun seurauksena kutsutaan Teemu-oliolta ensin kaksi kertaa
//peräkkäin eroa metodia. Ensimmäisellä kertaa puretaan liitto Tiinaan.
//Toisella kertaa Teemu ei ole enää naimisissa, joten sijoituslauseita
//ei suoriteta. Seuraavaksi Teemun puolisoksi asetetaan kaksi kertaa
//peräkkäin Teemu.
teemu.avioidu(teemu);
//Seuraavan metodikutsun suorituksen aikana asetetaan ensin Teemun
//puolison eli Teemun puoliso-attribuutin arvoksi tyhjä viite.
//Tämän jälkeen Teemun puoliso-attribuutin arvoksi asetetaan jälleen
//tyhjä viite. Ohjelma ei aiheuta virhettä.
teemu.eroa();
}

public static void tulostaHenkilo(Henkilo h) {
System.out.printf("%s pituus %.2f ikä %d%n",
h.getNimi(), h.getPituus(), h.getIkäVuosina());
}
}

13

1054

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • saadaan käyttämään tuota He...

      Olen lukenut tuota kirjaa, lukenut Sunin sivuja ja nyt metsästän vielä kokonaisia ohjelmia netistä.

      miten tuo ohjelma saadaan käyttämään tuota Henkilo-luokkaa?

      Apuva ja kiitoksia.

      • Hmmmm....

        En ehkä ymmärtänyt täysin ongelmaa, sillä ohjelmahan käyttää kyseistä Henkilö -luokkaa. Jos tarkoitit miten saat kääntymään tuon ohjelman, niin 1) luo "TeemuJaTiina.java" -niminen tiedosto ja sijoita sinne TeemuJaTiina -luokka, 2) luo "Henkilo.java" -niminen tiedosto ja sijoita sinne Henkilo –luokka. 3) käännä ohjelma esimerkiksi komennolla "javac TeemuJaTiina.java" 4) suorita ohjelma esimerkiksi komennolla "java TeemuJaTiina". Ohjelma antaa tulosteen:

        Teemu pituus 0,81 ikä 0
        Tiina pituus 0,83 ikä 0
        Teemu pituus 0,81 ikä 0


      • jo näkyä valoa
        Hmmmm.... kirjoitti:

        En ehkä ymmärtänyt täysin ongelmaa, sillä ohjelmahan käyttää kyseistä Henkilö -luokkaa. Jos tarkoitit miten saat kääntymään tuon ohjelman, niin 1) luo "TeemuJaTiina.java" -niminen tiedosto ja sijoita sinne TeemuJaTiina -luokka, 2) luo "Henkilo.java" -niminen tiedosto ja sijoita sinne Henkilo –luokka. 3) käännä ohjelma esimerkiksi komennolla "javac TeemuJaTiina.java" 4) suorita ohjelma esimerkiksi komennolla "java TeemuJaTiina". Ohjelma antaa tulosteen:

        Teemu pituus 0,81 ikä 0
        Tiina pituus 0,83 ikä 0
        Teemu pituus 0,81 ikä 0

        No niin. Minä luulin että tuon Henkilo-luokan pitää olla samassa "koodissa" ennen tuota TeemuJaTiina luokkaa tms.

        Käytössä on Netbeans. Olen tehnyt projektin ja tuossa on noi class:it erikseen samassa package:ssa.


      • sijoita sinne
        Hmmmm.... kirjoitti:

        En ehkä ymmärtänyt täysin ongelmaa, sillä ohjelmahan käyttää kyseistä Henkilö -luokkaa. Jos tarkoitit miten saat kääntymään tuon ohjelman, niin 1) luo "TeemuJaTiina.java" -niminen tiedosto ja sijoita sinne TeemuJaTiina -luokka, 2) luo "Henkilo.java" -niminen tiedosto ja sijoita sinne Henkilo –luokka. 3) käännä ohjelma esimerkiksi komennolla "javac TeemuJaTiina.java" 4) suorita ohjelma esimerkiksi komennolla "java TeemuJaTiina". Ohjelma antaa tulosteen:

        Teemu pituus 0,81 ikä 0
        Tiina pituus 0,83 ikä 0
        Teemu pituus 0,81 ikä 0

        mitä tarkoittaa ..."ja sijoita sinne TeemuJaTiina -luokka".


      • Hmmmm....
        sijoita sinne kirjoitti:

        mitä tarkoittaa ..."ja sijoita sinne TeemuJaTiina -luokka".

        --- TIEDOSTO ALKAA: TeemuJaTiina.java ---

        /**
        * Esimerkki Henkilo-luokan käytöstä ohjelmassa.
        * @author Mika Vesterholm 2005-11-27
        */
        public class TeemuJaTiina {
           public static void main(String[] args) {
              Henkilo teemu = new Henkilo("111111-1111");
              teemu.setNimi("Teemu");
              teemu.kasva();
              tulostaHenkilo(teemu);
              Henkilo tiina = new Henkilo("222222-2222");
              tiina.setNimi("Tiina");
              tiina.kasva(); tiina.kasva();
              tulostaHenkilo(tiina);
              teemu.avioidu(tiina);
              tulostaHenkilo( tiina.getPuoliso() );
              teemu.avioidu(teemu);
              teemu.eroa();
           }

           public static void tulostaHenkilo(Henkilo h) {
              System.out.printf("%s pituus %.2f ikä %d%n",
              h.getNimi(), h.getPituus(), h.getIkäVuosina());
           }
        }

        --- TIEDOSTO LOPPUU ---



        --- TIEDOSTO ALKAA: Henkilo.java ---

        import java.util.Random;

        public class Henkilo {
           private final String hetu;
           private String nimi;
           private int ikä = 0;
           private float pituus = 0.0F;
           private Henkilo puoliso;
           private Random geenit = new Random();

           public Henkilo(String hetu) { this.hetu = hetu; }
           public String getHetu() { return hetu; }
           public void setNimi(String uNimi) { nimi = uNimi; }
           public String getNimi() { return nimi; }
           public float getPituus() { return pituus; }
           public Henkilo getPuoliso() { return puoliso; }
           public int getIkäVuosina() { return ikä/12; }
           public void vanhene() { ikä ; }

           public float kasva() {
              vanhene();
              float kasvu = geenit.nextFloat();
              pituus = kasvu;
              return kasvu;
           }

           public void avioidu(Henkilo h) {
              h.eroa();
              eroa();
              puoliso = h;
              h.puoliso = this;
           }

           public void eroa() {
              if (puoliso != null) {
                 puoliso.puoliso = null;
                 puoliso = null;
              }
           }
        }

        --- TIEDOSTO LOPPUU ---


      • komentokehoitteesta
        Hmmmm.... kirjoitti:

        --- TIEDOSTO ALKAA: TeemuJaTiina.java ---

        /**
        * Esimerkki Henkilo-luokan käytöstä ohjelmassa.
        * @author Mika Vesterholm 2005-11-27
        */
        public class TeemuJaTiina {
           public static void main(String[] args) {
              Henkilo teemu = new Henkilo("111111-1111");
              teemu.setNimi("Teemu");
              teemu.kasva();
              tulostaHenkilo(teemu);
              Henkilo tiina = new Henkilo("222222-2222");
              tiina.setNimi("Tiina");
              tiina.kasva(); tiina.kasva();
              tulostaHenkilo(tiina);
              teemu.avioidu(tiina);
              tulostaHenkilo( tiina.getPuoliso() );
              teemu.avioidu(teemu);
              teemu.eroa();
           }

           public static void tulostaHenkilo(Henkilo h) {
              System.out.printf("%s pituus %.2f ikä %d%n",
              h.getNimi(), h.getPituus(), h.getIkäVuosina());
           }
        }

        --- TIEDOSTO LOPPUU ---



        --- TIEDOSTO ALKAA: Henkilo.java ---

        import java.util.Random;

        public class Henkilo {
           private final String hetu;
           private String nimi;
           private int ikä = 0;
           private float pituus = 0.0F;
           private Henkilo puoliso;
           private Random geenit = new Random();

           public Henkilo(String hetu) { this.hetu = hetu; }
           public String getHetu() { return hetu; }
           public void setNimi(String uNimi) { nimi = uNimi; }
           public String getNimi() { return nimi; }
           public float getPituus() { return pituus; }
           public Henkilo getPuoliso() { return puoliso; }
           public int getIkäVuosina() { return ikä/12; }
           public void vanhene() { ikä ; }

           public float kasva() {
              vanhene();
              float kasvu = geenit.nextFloat();
              pituus = kasvu;
              return kasvu;
           }

           public void avioidu(Henkilo h) {
              h.eroa();
              eroa();
              puoliso = h;
              h.puoliso = this;
           }

           public void eroa() {
              if (puoliso != null) {
                 puoliso.puoliso = null;
                 puoliso = null;
              }
           }
        }

        --- TIEDOSTO LOPPUU ---

        Tein nuo ja yritin komentokehoitteesta komentaa kertomallasi tavalla. Ei toiminut.

        Osaatko sanoa miten tuo saadaan toimimaan NetBeans IDE6.1 ympäristössä?


      • jaavake
        komentokehoitteesta kirjoitti:

        Tein nuo ja yritin komentokehoitteesta komentaa kertomallasi tavalla. Ei toiminut.

        Osaatko sanoa miten tuo saadaan toimimaan NetBeans IDE6.1 ympäristössä?

        javac Henkilo.java
        javac TeemuJaTiina.java
        java TeemuJaTiina


      • sain NetBeansissa toimimaan
        jaavake kirjoitti:

        javac Henkilo.java
        javac TeemuJaTiina.java
        java TeemuJaTiina

        javac ei tunnistettu sisäiseksi tau ulkoiseksi komennoksi,....

        tuollaista tulee minulla

        NetBeansissa sain tosin toimimaan, kun tein uuden projektin ja ilmeisesti jotain muutin. Mutta mitä muutin, sitä en (vielä) tiedä.


      • hmmm...
        sain NetBeansissa toimimaan kirjoitti:

        javac ei tunnistettu sisäiseksi tau ulkoiseksi komennoksi,....

        tuollaista tulee minulla

        NetBeansissa sain tosin toimimaan, kun tein uuden projektin ja ilmeisesti jotain muutin. Mutta mitä muutin, sitä en (vielä) tiedä.

        Java kääntäjän hakemistosi ei ole polussa, eli PATH ympäristö muuttujassa, joten sen takia tuo komentotulkki herjaa, ettei käskyä tunnisteta. Joudut kertomaan komentotulkille sen polun jossa Java kääntäjä sijaitsee, jos haluat kääntää komento riviltä, esimerkiksi:

        c:\testi>"c:\Program Files\Java\jdk1.6.0_06\bin\javac.exe" TeemuJaTiina.java

        Tuo yllä oleva komento kääntää automaattisesti myös Henkilö -luokan.

        Itse en ole koskaan käyttänyt Netbeansia (sillä käytän pääasiassa Eclipseä), mutta luulisi Netbeansinkin herjaavan jotain tai ilmoittavan siitä missä mahdollinen vika on. Voisin veikata, että ehkä et mahdollisesti ollut kertonut Netbeansille oikein sitä kumpi luokka (Henkilo vaiko TeemuJaTiina) sen tulee yrittää käynnistää, kun painat kun painat Run/Aja painiketta.

        Ihan mielenkiinnosta, niin tiedätkö miksi esimerkissä ei käytetä skandeja, eli miksi esim. luokan nimi on Henkilo eikä Henkilö?


      • kirjan esimerkki (cd:ltä ot...
        hmmm... kirjoitti:

        Java kääntäjän hakemistosi ei ole polussa, eli PATH ympäristö muuttujassa, joten sen takia tuo komentotulkki herjaa, ettei käskyä tunnisteta. Joudut kertomaan komentotulkille sen polun jossa Java kääntäjä sijaitsee, jos haluat kääntää komento riviltä, esimerkiksi:

        c:\testi>"c:\Program Files\Java\jdk1.6.0_06\bin\javac.exe" TeemuJaTiina.java

        Tuo yllä oleva komento kääntää automaattisesti myös Henkilö -luokan.

        Itse en ole koskaan käyttänyt Netbeansia (sillä käytän pääasiassa Eclipseä), mutta luulisi Netbeansinkin herjaavan jotain tai ilmoittavan siitä missä mahdollinen vika on. Voisin veikata, että ehkä et mahdollisesti ollut kertonut Netbeansille oikein sitä kumpi luokka (Henkilo vaiko TeemuJaTiina) sen tulee yrittää käynnistää, kun painat kun painat Run/Aja painiketta.

        Ihan mielenkiinnosta, niin tiedätkö miksi esimerkissä ei käytetä skandeja, eli miksi esim. luokan nimi on Henkilo eikä Henkilö?

        en tiedä miksi ei ole skandeja. kirjan esimerkki (cd:ltä otettu). seuraavassa esimerkissä näköjään on skandit.


      • asdfasdfasdf
        hmmm... kirjoitti:

        Java kääntäjän hakemistosi ei ole polussa, eli PATH ympäristö muuttujassa, joten sen takia tuo komentotulkki herjaa, ettei käskyä tunnisteta. Joudut kertomaan komentotulkille sen polun jossa Java kääntäjä sijaitsee, jos haluat kääntää komento riviltä, esimerkiksi:

        c:\testi>"c:\Program Files\Java\jdk1.6.0_06\bin\javac.exe" TeemuJaTiina.java

        Tuo yllä oleva komento kääntää automaattisesti myös Henkilö -luokan.

        Itse en ole koskaan käyttänyt Netbeansia (sillä käytän pääasiassa Eclipseä), mutta luulisi Netbeansinkin herjaavan jotain tai ilmoittavan siitä missä mahdollinen vika on. Voisin veikata, että ehkä et mahdollisesti ollut kertonut Netbeansille oikein sitä kumpi luokka (Henkilo vaiko TeemuJaTiina) sen tulee yrittää käynnistää, kun painat kun painat Run/Aja painiketta.

        Ihan mielenkiinnosta, niin tiedätkö miksi esimerkissä ei käytetä skandeja, eli miksi esim. luokan nimi on Henkilo eikä Henkilö?

        Ihan mielenkiinnosta.. miksi kukaan ikinä käyttäisi skandeja luokkien nimissä? Tiedostojen merkistökoodaukset voivat olla erilaiset jo samassa editorissa, jolloin ä ei välttämättä olekaan ä.

        Vielä jos joutuu tekemään tiedostojen siirtoja eri ympäristöjen välillä, vastaan tulee usein iso88591 ja utf8 vaihtelua. Nuo ääkköselliset luokathan ei lopulta toimisi ollenkaan, tai sitten kääntäessä tulisi 'unmappable character'-virheitä, kun joka tiedosto sisältää ihan mitä sattuu.


      • skandeja
        asdfasdfasdf kirjoitti:

        Ihan mielenkiinnosta.. miksi kukaan ikinä käyttäisi skandeja luokkien nimissä? Tiedostojen merkistökoodaukset voivat olla erilaiset jo samassa editorissa, jolloin ä ei välttämättä olekaan ä.

        Vielä jos joutuu tekemään tiedostojen siirtoja eri ympäristöjen välillä, vastaan tulee usein iso88591 ja utf8 vaihtelua. Nuo ääkköselliset luokathan ei lopulta toimisi ollenkaan, tai sitten kääntäessä tulisi 'unmappable character'-virheitä, kun joka tiedosto sisältää ihan mitä sattuu.

        itsekään en mielelläni käytä skandeja, kun en tosiaakaan luota siihen etteikö niiden käyttö saattaisi aiheuttaa ongelmia.

        En tosin tajunnut tuon edellisen syistä yhtään mitään. Vielä. Jeesh, olenkin vasta-alkaja.


      • hmmm....
        asdfasdfasdf kirjoitti:

        Ihan mielenkiinnosta.. miksi kukaan ikinä käyttäisi skandeja luokkien nimissä? Tiedostojen merkistökoodaukset voivat olla erilaiset jo samassa editorissa, jolloin ä ei välttämättä olekaan ä.

        Vielä jos joutuu tekemään tiedostojen siirtoja eri ympäristöjen välillä, vastaan tulee usein iso88591 ja utf8 vaihtelua. Nuo ääkköselliset luokathan ei lopulta toimisi ollenkaan, tai sitten kääntäessä tulisi 'unmappable character'-virheitä, kun joka tiedosto sisältää ihan mitä sattuu.

        No kuitenkin, vaikka siitä samasta syystä miksi se joku käyttää skandeja osissa muuttujien nimissä, metodien nimissä, merkkijonoissa, ja kommenteista, (kuten esimerkissä). Onko luokan nimi kuitenkaan niin paljon erikoisempi tapaus kuin esim. metodin nimi?


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Voitasko leikkiä jotain tunnisteleikkiä?

      Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta
      Ikävä
      80
      1975
    2. Tietysti jokainen ansaitsee

      Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt
      Ikävä
      18
      1753
    3. Millä voin

      Hyvittää kaiken?
      Ikävä
      16
      1614
    4. 50+ naiset kyl

      Lemottaa sillille mut myös niitte kaka lemottaa pahlle ku kävin naiste veskis nuuhiin
      Ikävä
      20
      1356
    5. Välitän sinusta mies

      Kaikki mitä yritin kertoa tänään ei mennyt ihan putkeen..Joka jäi jälkeenpäin ajateltuna suoraan sanottuna harmittaa aiv
      Työpaikkaromanssit
      6
      1262
    6. En voi sille mitään

      Tulen niin pahalle tuulelle tästä paikasta nykyisin. Nähnyt ja lukenut jo kaiken ja teidän juttu on samaa illasta toisee
      Ikävä
      12
      1254
    7. Jotain puuttuu

      Kun en sinua näe. Et ehkä arvaisi, mutta olen arka kuin alaston koivu lehtiä vailla, talven jäljiltä, kun ajattelen sinu
      Ikävä
      50
      1253
    8. hieman diabetes...

      Kävin eilen kaverin kanssa keskusapteekissa kun on muutama kuukausi sitten tullut suomesta ja oli diabetes insuliinit lo
      Pattaya
      12
      1246
    9. Miten joku voi käyttää koko elämänsä

      siihen että nostelee täällä vanhoja ketjuja ja troIIaa niihin jotain linkkiä mitä kukaan ei avaa? Ihmisellä ei ole mitää
      Tunteet
      10
      1212
    10. Annetaanko olla vaan

      Siinä se, tavallaan kysymys ja toteamuskin. Niin turhaa, niin rikkovaa. On niin äärettömän tärkeä, ja rakas olo.. N
      Ikävä
      29
      1191
    Aihe