Überprüfen, ob Array Elemente hat

  • Themenstarter Themenstarter thekryz
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

thekryz

Gast
Hi,

ich habe ein Array von Knoten ("Vertex", selbst erzeugte Objekte - spielt aber eigentlich keine Rolle 😉) der Größe x. Sagen wir mal x = 8.
Code:
Vertex[] vertexList = new Vertex[8]
Ich will nun überprüfen, ob sich in diesem Array irgendwelche Elemente / Objekte befinden oder nicht. Wie würdet ihr das am Geschicktesten anstellen?
Code:
vertexList.length();
gibt leider nur die "möglichen" Elemente wieder, aber nicht die tatsächlichen.
Schnelle Antwort wäre toll ^^ Ich nehme mal an, dass es eine einfache gibt - aber per Google konnte ich bisher keine finden. Auch mein schlaues Buch (Handbuch der Java-Programmierung 4.Auflage) konnte mir nicht helfen...

Gruß,
Chris
 
Nimm doch eine Collection (zB. List) anstatt einem "dummen" Array...
 
@SlaterB: da macht man jahrelang Java und weiß nicht, ob man gegen null prüfen kann 😛
@maki: Geht in dem Fall leider schwerer, da ich eine Begrenzung brauche... sonst müsste ich das abprüfen 😉

Chris
 
Na, ich darf nur eine bestimmte Anzahl Elemente darin speichern. Ich hab von Deiner "List" mal auf eine "ArrayList" oder nen "Vector" geschlossen - und die können beliebig viele Elemente speichern.
 
Vector kannst du vergessen, ausser du musst mit Swing arbeiten.

Alle List Implementierungen (ArrayList, LinkedList) sind zwar dynamisch in der Größe, aber auch da kann man die Größe prüfen, dass musst du bei Arrays sowieso, wenn du keine Lust auf IndexOutOfBounds Exceptions hast 😉
 
..macht aus OO- und allgemeiner Programmier-Sicht einen bedeutenden Unterschied
 
IndexOutOfBoundsException abfangen ist für'n Ar...

Sorry, aber solange durch ein Array/Collection iterieren bis eine IndexOutOfBoundsException kommt ist Pfusch.
 
Gut, durchiterieren wollte ich ja jetzt nicht... aber wenn es darum geht festzustellen, ob eine Abfrage ins Leere laufen würde, dann kann ich die Exception doch abfangen - dafür ist sie doch da.
Widersprecht mir, ich lerne gerne 😉 Aber bis jetzt kann ich den tiefgreifenden Unterschied nicht feststellen.
 
die Exception ist dafür nicht da, sondern für den Programmfluss, wenn man doch mal versehentlich falsch zugreift (an Stelle von Totalabsturz)

ähnliches Beispiel:
Object x = map.get(y);

nun kann man einfach x==null prüfen (ok, das kanntest du ja bisher noch nicht 😉 )
oder eine NullPointerException abfangen,

wann immer der Code für das if kürzer ist und keine großartigen Berechnungen beinhaltet,
stellt sich keine Frage, ob man die Exception verwenden sollte,

auch RuntimeExceptions, die man nicht abfangen muss, sind ein sehr guter Hinweis,

an anderen Stellen wie Netzwerkkommunikation, hat man weniger Möglichkeiten, irgendwas vorher zu prüfen,
und ist auf die Exceptions angewiesen

---
so, ein richtiger Grund ist dabei vielleicht nicht dabei,
abgesehen von sehr verschachtelten Code wirst du mit mühsamen try/ catch wohl auch alles nachbauen können,
das stimmt
 
Bloch hat das ganze in seinem Buch (Effective Java) abgehandelt, try/catch beim iterieren/einfügen ist voll daneben, da man diese bedingungen abprüfen kann(!), was der richtige Weg ist.

Abgesehen von der Performance (try/catch ist relativ teuer) ist es schlechter Stil, bläht den Code auf und zeigt das man die API nicht verstanden hat.
 
teuer und unübersichtlich waren bis jetzt die besten Gründe. Also werde ich in Zukunft (wie auch bisher) hübsch sauberen Code schreiben und meine Exceptions nur im unvorhergesehenen Fall abfangen 😉
Merci nochmal^^
 
Keine Ursache, Effective Java kann ich nur empfehlen, Bloch ist derjenige der für das Collection Framework, Generics und vieles andere in Java verantwortlich war 😉
 
Juhuu, ich darf das Thema nochmal rausholen 😉

Wie sieht's mit int-Arrays aus? Die können offensichtlich nicht auf "null" hin geprüft werden. Behauptet zumindest mein Eclipse 😉 Haben int-Arrays einen Standardwert? 0 zB? Oder wie kann ich da überprüfen, ob an einer Stelle im Array ein int steht oder nicht?
0 ist ja auch nicht gleichbedeutend mit "nicht vorhanden"...

Gruß,
Chris
 
Ja, der Initialwert bei int-Arrays ist 0. Du könntest es ja am Anfang mit -1 befüllen:
Code:
for(int j = 0; j < iArr.length; j++)
  iArr[j] = -1;
 
Primitive typen können nicht null sein, höchstens 0.

Lieber eine Collection mit Integers oder autoboxing int.
 
das kannst du also gar nicht prüfen, du kannst nur einen der definierten Werte abfragen,
evtl -4983035 als Standard-Wert für 'nix' festlegen
 
Hmm, Problem ist, dass in diesem int-Array alle int-Werte auch echte Werte sein könnten. Damit wäre weder 0 noch -1 eindeutig.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben