Tuo viittaus tuottaa vähän harmaita hiuksia.
Ongelma on seuraavanlainen. Oletetaan, että haluan tehdä yksilöllisen linja-auton, ja siihen asetettavan matkustajan. Koodina se voisi olla seuraavanlainen pelkistetysti:
import java.util.*;
public class Linja_auto {
private ArrayList reissaajat;
private int rekisterinumero;
public Linja_auto(int rek) {
rekisterinumero = rek;
}
public Linja_auto() {
reissaajat = new ArrayList();
}
public void lisaa(Matkustaja m) {
reissaajat.add(m);
}
}
Matkustaja-olio olisi seuraavanlainen:
public class Matkustaja {
private String nimi;
public Matkustaja(String matkustaja) {
nimi = matkustaja;
}
}
Testiohjelma, jolla sitä ajan:
public class Testi {
public static void main(String[] args) {
Linja_auto Bussi = new Linja_auto(313); // Alustaa linja-auton
Matkustaja m1 = new Matkustaja("Anna"); // Alustaa matkustajan
Bussi.lisaa(m1); //Asettaa matkustajan "Anna" autoon.
}
}
Kääntäminen sujuu ilman ongelmia, mutta jos ohjelmaa haluaa ajaa java Testi -komennolla, niin se antaa virheilmoituksen:
Exception in thread "main" java.lang.NullPointerException
at Linja_auto.lisaa
at Testi.main
Mikähän menee vikaan? Kun kaiken lisäksi jos käyttää this viittausta, niin homma toimii täysin:
public Linja_auto(int rekisterinumero) {
this();
this.rekisterinumero = rekisterinumero;
}
En ymmärrä?? Eikö tuotakaan saa tehtyä ns. analogisesti? Kun ei tuossa virheilmoituksen antavassa koodissa minusta ainakaan pitäisi analogiansa vuoksi olla mitään vikaa.
Myös tuo ArrayList herättää pieniä kysymyksiä. Eikö tuotakaan saa tehtyä esim. String:iä käyttämällä?
Sinänsä miksi en voisi käyttää tuota this -viittausta, kun se toimii? Entäpä tulevaisuudessa? Kun en tiedä nytkään mikä on ongelmana, niin myöhemmässä vaiheessa voi tulla samanlaisia selittämättömiä ongelmia, joista ei noin helpolla luikerrellakaan pois. Muutenkin haluaisin ymmärtää tuota systeemiä enkä pelkästään opetella ulkoa, että mitä komentoja saa missäkin yhteydessä käyttää ja mitä ei. Ja näyttäähän tuo toimivan String muodossa ainakin tuossa Matkustaja-oliossa..
Viittaaminen
itseensä: this
2
480
Vastaukset
- ....................
En jaksanut lukea viestiäs loppuun, mutta oisko onglema siinä, että sulla on kaks rakentajaa linja-autolla, joista vain toisessa teet new ArrayListin. Jos linja-auto luodaan testiohjelman mukaisesti rekisterinumeroparametrillisellä, pysyy reissaajat nullina, eli et voi sen jälkeen kutsua suoraan tuollaisenaan tuota lisäysmetodia.
- siinä oli kysymys
kiitti vain avusta.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Veroaste on Suomessa viitisen prosenttiyksikköä liian matala
Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka662382- 661367
Kyläkauppias ajoi kännissä töistä kotiin
Ei edes kallis auto estä humalassa ajamista, vaikka luulisi alkolukko olevan sellaisessa jo vakiovarusteena. https://ww651115EU komissio - EU-elpymisrahoja voidaan käyttää TILAPÄISESTI väärin!
Espanja ohjasi miljardeja euroja – Nyt EU-komissio teki yllättävän paljastuksen Skandaaliksi noussut Espanjan EU-rahoje41077- 77803
Kiitos upeasta palvelusta kukkamyyjä
Kiitos sinulle upea kaunis kukkamyyjä Kuhmon torilla 🌹 Upea iloinen asenteesi ja kaunis hymysi pelasti päiväni ❤️ Jäi19780Ratikka Turkuun
Ei hyvä. Ja syy on siinä , kukaan ei osaa suunnitella oikeaa reittiä. Pitää huomioide, kiskoja sijaintia ei voi muutta82650- 43648
Miehet trikoissaan
On se kauhian näkköistä, kun miehet tiukossa trikkoissa juoksentelloo ja mulukku paestaa trikkoijjen läpi. Kahtokkee pe23615- 27571