PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum kriege ich beim Arrayzugriff NULL?


Gast
2005-10-28, 09:24:13
Hi,
hier der Code

Huffmann
{
private List [] li=new List[26];
public Huffmann()


{

try
{

init_list();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
private void init_list()
{ int counter=0; // Fülle List mit zeichen und Häufigkeiten
for(char zeichen='a';zeichen<='z';zeichen++)
{

System.out.println(li[counter].get_sign());
li[counter].set_values(zeichen,0);
counter++;

}

}
}

List ist eine Datenstrukur mit char und einem int Feld.
Hat jemand von euch eine Idee?

noid
2005-10-28, 10:21:52
must du nicht erst die listenelemente mit new einzeln anlegen?


edit: also sowas wie

for(char zeichen='a';zeichen<='z';zeichen++) {
System.out.println(li[counter].get_sign());
li[counter] = new List();
li[counter].set_values(zeichen,0);
counter++;
}

und dann deine operationen drauf.

Gast
2005-10-28, 10:30:14
thx du hast Recht.Ich dachte, dass Java das automatisch wie in c++ macht.

noid
2005-10-28, 10:41:08
c++ macht das doch auch nicht automatisch? O_o

kann auch daran liegen, dass ich sowas immer mit zeiger-arrays mache X-(

Monger
2005-10-28, 10:54:00
thx du hast Recht.Ich dachte, dass Java das automatisch wie in c++ macht.

Ähhh... List ist NICHT das List des JDKs???

Eine Liste aus Objekten wird natürlich immer mit Null initialisiert. Nur Listen aus Basisdatentypen werden mit 0 initialisiert.

Ich finde, es gibt in Java SEHR wenige Gründe, nicht das Collections Framework zu verwenden. Nimm die ArrayList, und du hast deutlich weniger Probleme mit dem richtigen iterieren, Null Pointer Exceptions usw.

noid
2005-10-28, 11:00:00
Ähhh... List ist NICHT das List des JDKs???

Eine Liste aus Objekten wird natürlich immer mit Null initialisiert. Nur Listen aus Basisdatentypen werden mit 0 initialisiert.

Ich finde, es gibt in Java SEHR wenige Gründe, nicht das Collections Framework zu verwenden. Nimm die ArrayList, und du hast deutlich weniger Probleme mit dem richtigen iterieren, Null Pointer Exceptions usw.

wenn er es nicht einbindet, dann kann sein objekt doch heissen wie es will?

eigentlich ist sein Objekt ja eher ein ListeElement ,) statt einer List

Monger
2005-10-28, 11:13:10
@noid: In deinem Quelltext sehe ich zumindest einen Fehler. Richtig müsste sein:


for(char zeichen='a';zeichen<='z';zeichen++) {
List listeneintrag = new List();
li[counter] = listeneintrag;
listeneintrag.set_values(zeichen,0);
}


Dann sind alle Einträge initialisiert, und man kann sie verwenden. In diesem Fall muss man natürlich die Buchstabenhäufigkeit anstelle der 0 reinprügeln. Wenn man alles in eins reinpacken will, kommt man um eine Abfrage ob das jeweilige Objekt schon existiert, nicht rum.

Und wenn in der Liste das drin steckt was auch reingehört, bekommt man es auch leicht wieder raus! :p

noid
2005-10-28, 11:50:06
Ich weiss nicht welcher Fehler das sein könnte, aber wenn du es getestet hast dann mag das sicherlich sein. War ja nur ein konzeptioneller Ansatz, da ich wusste, dass Objekte unter Java eigentlich immer erst mit new angelegt werden muss (außer Basistypen wie int etc.)

X-D
hab's ehrlich nicht getestet, wollte nicht eclipse starten wenn es nicht sein muss X-D

Senior Sanchez
2005-10-28, 12:02:40
Ähhh... List ist NICHT das List des JDKs???

Eine Liste aus Objekten wird natürlich immer mit Null initialisiert. Nur Listen aus Basisdatentypen werden mit 0 initialisiert.

Ich finde, es gibt in Java SEHR wenige Gründe, nicht das Collections Framework zu verwenden. Nimm die ArrayList, und du hast deutlich weniger Probleme mit dem richtigen iterieren, Null Pointer Exceptions usw.

Jops, sieht man das damit nicht die List ausm JDK gemeint sein kann ;) Kleiner Tipp, schau dir mal die Methoden an, das ist garantiert keine Java-Liste.

Monger
2005-10-28, 12:27:11
Ich weiss nicht welcher Fehler das sein könnte, aber wenn du es getestet hast dann mag das sicherlich sein. ...

Habs nicht getestet.
Sorry, muss meinen BS widerrufen. Das was du schreibst, ist völlig richtig. Meins ist aber auch nicht falsch! :)
Ich verwende praktisch nie Arrays, deshalb schwirrte da irgendwie ein ganz böser Gedanke in meinem Kopf rum...

Jops, sieht man das damit nicht die List ausm JDK gemeint sein kann Kleiner Tipp, schau dir mal die Methoden an, das ist garantiert keine Java-Liste.

Ich bin vorallem darüber gestolpert, dass er den Konstruktor von List aufgerufen hat. List ist schließlich abstrakt.

Senior Sanchez
2005-10-28, 13:11:34
Ich bin vorallem darüber gestolpert, dass er den Konstruktor von List aufgerufen hat. List ist schließlich abstrakt.

Hmms, wo ruft er den Konstruktor auf? Finde die Stelle wohl nicht ;)

zeckensack
2005-10-28, 14:01:58
c++ macht das doch auch nicht automatisch? O_oDoooch :)
Für jedes Element eines mittels new angelegten Arrays wird der Konstruktor aufgerufen. Und der Speicher wird ja sowieso reserviert.
Umgekehrt kriegt man auch den Destruktor geschenkt, wenn man new[] einsetzt.#include <stdio.h>
int pudding=0;
int brumms=0;

class
Zitrone
{
public:
Zitrone():egal(0) {++pudding;}
~Zitrone() { ++brumms; }
private:
int egal;
};

int
main()
{
Zitrone* sack=new Zitrone[26];
delete[] sack;

printf("Yay! %d!! %d!!!\n",pudding,brumms);
return(0);
}Rate mal was das ausgibt :)

noid
2005-10-28, 14:15:46
26 -.-

deine variablennamen erinner mich an meine ^^
ok, wieder was gelernt. ich habe aber in der regel nur zeiger in arrays gespeichert. X-D da verdrängt man sowas vllt.

Coda
2005-10-28, 17:37:37
c++ macht das doch auch nicht automatisch? O_oKommt drauf an, wenn du std::vector<Object> test(10); deklarierst werden schon 10 Elemente zur Startzeit erzeugt.

Das Äquivalent zu Java wäre std::vector<Object*> test(10), oder noch besser std::vector<boost::shared_ptr<Object> > test(10) ;)

Monger
2005-10-28, 23:14:42
Hmms, wo ruft er den Konstruktor auf? Finde die Stelle wohl nicht ;)

Was zur Hölle ist eigentlich los mit mir? Ich sehe nur Gespenster! Ich verabschiede mich hiermit für ein paar Tage aus dem Programmier-Forum, um ein paar Tage über meine miese Wahrnehmung zu reflektieren...

Senior Sanchez
2005-10-28, 23:53:15
Was zur Hölle ist eigentlich los mit mir? Ich sehe nur Gespenster! Ich verabschiede mich hiermit für ein paar Tage aus dem Programmier-Forum, um ein paar Tage über meine miese Wahrnehmung zu reflektieren...

Lol, mach dir keinen Kopf. Das passiert jedem Mal (gut, HellHorse vllt nicht :uup:), also komm bald wieder. Ich will hier was zu lesen haben *g*