23. oktober 2004 - 20:34
Der er
19 kommentarer og 1 løsning
Fatal exeption
Hejsa sidder bare og eksperimentere med Java og er stødt på følgende problem... har 3 klasser... Do.class Terning.class Start.class Vi kigger på Do.class koden. Mit spørgsmål er hvorfor kan jeg ikke skrive sådan her? Terning[] go; det virker kun hvis jeg skriver Terning[] go = new Terning[]; og selvfølgelig retter til i koden. Bruger jeg "Terning[] go;" forkert? public class Do { Terning[] go; public String velkommen() { return "Velkommen"; } public void Terninger() { go[1] = new Terning(); go[1].kastTerning(); } public String toString() { return "Tallet blev " + go[1].getTal() ; } }
Annonceindlæg fra Cornerstones
23. oktober 2004 - 20:35
#1
Terning[] go; erklærer en reference til et array af Terning og giver den værdien null. Hvilket gør at du får en null pointer exception hvis du forsøger at bruge det.
23. oktober 2004 - 20:37
#2
Terning[] go = new Terning[]; erklærer en reference til et array af Terning, allokerer 2 Terning og sætter referencen til at pege på det allokerede. (vigtigt: Terning er selv en reference som er null indtil den sættes til at pege på noget new'et)
23. oktober 2004 - 20:37
#3
hvordan skal jeg så bruge den? har nemlig ikke helt forstået dens formål endnu... skal man opretter den sådan Terning[] go = new Terning[x]; et sted i koden for så at bruge den?
23. oktober 2004 - 20:40
#4
Terning[] go = new Terning[2]; for(int i = 0; i < go.length; i++) { go[i] = new Terning(); } så peger både array referencen og de 2 objekt referencer på noget
23. oktober 2004 - 21:35
#5
skulle lige hurtigt spise.. tænkte bare på hvad er formålet med Terning[] go; ? for troede man så kunne skrive go[0] = new Terning(); og dermed peger go[0] på et objekt af typen Terning. Men det kan man ikke hvorfor?
23. oktober 2004 - 21:38
#6
Du kan sagtens go[0] = new Terning(); men go[0] skal oprettes først og det gør: Terning[] go = new Terning[2];
23. oktober 2004 - 21:38
#7
eller Terning[] go; ... go = new Terning[2];
23. oktober 2004 - 21:46
#8
hmm har prøvet begge måde nu men får stadig den der fejl.. fatal exeption prøvede sådan her public class Do { Terning[] go; public String velkommen() { return "Velkommen"; } public void Terninger() { Terning[] go = new Terning[2]; go[0] = new Terning(); go[0].kastTerning(); } public String toString() { return "Tallet blev " + go[1].getTal() ; } } og sådan public class Do { Terning[] go; public String velkommen() { return "Velkommen"; } public void Terninger() { go = new Terning[2]; go[1].kastTerning(); } public String toString() { return "Tallet blev " + go[1].getTal() ; } }
23. oktober 2004 - 21:48
#9
public class Do { Terning[] go; public String velkommen() { return "Velkommen"; } public void Terninger() { Terning[] go = new Terning[2]; go[0] = new Terning(); go[0].kastTerning(); go[1] = new Terning(); go[1].kastTerning(); } public String toString() { return "Tallet blev " + go[1].getTal() ; } }
23. oktober 2004 - 21:48
#10
i det første eksempel stod der return "Tallet blev " + go[0].getTal() ; og ikke return "Tallet blev " + go[1].getTal() ;
23. oktober 2004 - 21:50
#11
Ah !!!! public class Do { Terning[] go; public String velkommen() { return "Velkommen"; } public void Terninger() { go = new Terning[2]; go[0] = new Terning(); go[0].kastTerning(); go[1] = new Terning(); go[1].kastTerning(); } public String toString() { return "Tallet blev " + go[1].getTal() ; } }
23. oktober 2004 - 21:51
#12
øv din kode virker heller ikke:/ vil lige poste de andre classer så du kan se om det har noget med dem at gøre evt
23. oktober 2004 - 21:51
#13
Og du skal huske at kalde Terninger inden toString ! Er du sikker på at void Terninger() ikke skulle være Do() ?
23. oktober 2004 - 21:51
#14
den virker! kigger lige på den! hehe
23. oktober 2004 - 21:54
#15
nej nej det virker godt sådan der:o) det var den ændring du lavede så der stod go = new Terning[2]; som gjorde forskellen! men hvorfor skrive Terning[] go; istedet for Terning[] go = new Terning(); ? er det fordi hvis man fx skrev
23. oktober 2004 - 21:55
#16
go[1] = new Terning(); inde i en metode så vil den ikke blive opfattet som en lokalvariabel?
23. oktober 2004 - 21:57
#17
Ændringen der fik det til at virke var netop at new'e den globale go i stedetfor en lokal go (som skyggede for den globale)
23. oktober 2004 - 21:58
#18
ops Terning[] go; istedet for Terning[] go = new Terning[2]; sådan selvfølgelig
23. oktober 2004 - 22:00
#19
Du velkommen til at ligge et svar fik løst en mindre gode der;)
23. oktober 2004 - 22:04
#20
svar
Kurser inden for grundlæggende programmering