handdator

Visa fullständig version : Lite problem med JAVA..


tegel
2005-11-03, 10:09
Nån java-kunnig här?

Sitter och sliter håret över att följande inte funkar..

Vector[] data = new Vector[3]

data[1].addElement(something)

får NullPointerException på den sista raden..VARFÖR?

Följande funkar däremot

Vector[] data = new Vector[]{new Vector(), new Vector(), new Vector()}

data[1].addElement(something)

Varför skapar int new Vector[3] tre stycken tomma vectorer som den borde göra? HJÄLP
har snart inte nåt hår kvar på huvudet..

knackwursten
2005-11-03, 10:16
Ingen hejare på java, håller mig till andra språk. Men det är inte så enkelt som att det är (vektorlängd) istället för [vektorlängd], "vanliga" paranteser alltså :)

Munter
2005-11-03, 10:17
Det är väl ganska självklart. Du deklarerar en array som kan hålla 3 instanser av Vector, men vektorna har ju inte blivit instantierade innan du kör addElement(), således blir det NPE.

tegel
2005-11-03, 10:21
Jo jag trodde new skulle fixa det..men det gör den alltså inte. Men hur gör jag för att instansiera vektorerna då?
kan ju inte kör data[0] = new Vector() för då blir det ju NPE.

Munter
2005-11-03, 10:24
Att deklara en array har ingen implicit instantiering av objekten den ska innehålla. new instantierar arrayen, inte objekten i den.

Vector[] data = new Vector[3]
data[0] = new Vector();
data[0].addElement("Fidde");

... detta fungerar utmärkt eftersom du instantierar både arrayen och objektet.

jwzrd
2005-11-03, 10:32
Att deklara en array har ingen implicit instantiering av objekten den ska innehålla. new instantierar arrayen, inte objekten i den.

Vector[] data = new Vector[3]
data[0] = new Vector();
data[0].addElement("Fidde");

... detta fungerar utmärkt eftersom du instantierar både arrayen och objektet.

:thumbup:

Munter
2005-11-03, 10:33
Hah! Jag hann före dig, j "java" wrzd! *flex*

acke_t
2005-11-03, 10:34
mm så det normala är att dra en forloop efter och köra new på alla.

tegel
2005-11-03, 10:36
Tackar så mycket för hjälpen! :bow:

jwzrd
2005-11-03, 10:42
Hah! Jag hann före dig, j "java" wrzd! *flex*

Hehe vaffalls! :D

jwzrd
2005-11-03, 10:43
mm så det normala är att dra en forloop efter och köra new på alla.

Yes. Måste du göra för alla referenstyp-arrayer. För primitivarrayer initieras alltid alla element till 0, 0.0 eller false beroende på typ.