Informatik Frage zu Arrays?
Programmiersprache: Java
Nehmen wir an, wir haben die zwei Variablen hier:
QueueInhalt aktuellePosition = queueinhalte[0];
QueueInhalt nextPosition = //...?
nextPosition soll quasi immer queueinhalte[index +1] sein. Wie kann man das programmieren?
3 Antworten
Kommt drauf an in welchem Kontext du das brauchst. Wenn du über das Array iterieren willst, dann so:
for (int i = 0; i < queueinhalte.length; i++) {
QueueInhalt aktuellePosition = queueinhalte[i];
QueueInhalt nextPosition = (i < queueinhalte.length - 1) ? queueinhalte[i+1] : null;
}
Hatte ich zuerst, aber ist deutlich hässlicher, weil man das Erstellen der Variable dann nach vorne verlagern muss, weil das geht ja schlecht hinterm if wegen anderem Scope.
QueueInhalt aktuellePosition, nextPosition;
for (int i = 0; i < queueinhalte.length; i++) {
aktuellePosition = queueinhalte[i];
if (i < queueinhalte.length - 1) nextPosition = queueinhalte[i+1];
else nextPosition = null;
}
Außerdem ist das keine "potentielle Exception" sondern eben ein besonderer Fall, den der Fragesteller handeln muss. Ist ja auch nicht Sinn der Sache, dass am Ende der Liste nochmal das letzte Element in "nextPosition" steht, das ist ja einfach nur falsch und gehört auch irgendwie extra gehandelt ... Also lieber gleich so, dann sieht man, wenn man vergessen hat, diesen Fall (am Ende der Liste angekommen) zu handeln.
Hatte ich zuerst, aber ist deutlich hässlicher, weil man das Erstellen der Variable dann nach vorne verlagern muss
... nur wenn, wenn man im else auch null haben will.
In dem Fall würde ich es auch so lassen, wie Du hast.
Allerdings ist das meiner Erfahrung nach eher selten der Fall. Meist will man damit ja was machen und mit null tut man nicht viel. Es folgt also wieder nur ein "if (nextPosition == null)" und dann können wir die Bedingung auch gleich ins if legen und ins else die Alternative schreiben.
Aber klar, das hängt sehr vom Kontext ab, doch null sollte man nur verwenden, wenn man es auch braucht.
Ergo:
for (int i = 0; i < queueinhalte.length; i++) {
QueueInhalt aktuellePosition = queueinhalte[i];
if (i < queueinhalte.length - 1) {
QueueInhalt nextPosition = queueinhalte[i + 1];
// ...
}
else {
// ...
}
}
By the way:
Ich finde es furchtbar, Variable außerhalb eines Scopes zu deklarieren, wenn man sie nur innerhalb braucht :D
Bei C# macht das auch technisch keinen Unterschied - ist bei Java vermutlich genauso.
Beziehst du dich auf reine Arrays, dann würde es sich anbieten, statt den oder zusätzlich zum Inhalt eben den Index zu speichern. Damit hast du die aktuelle Position und kannst sowohl auf den Inhalt an dieser Stelle zugreifen als auch den nächsten Index einfach berechnen ...
Wenn du keine Arrays nutzt, sondern andere Datenstrukturen, können diese eventuell auch eine Referenz auf den nächsten Knoten besitzen, welche du dann eben entsprechend nutzen kannst.
in dem falle müsstest du dir den aktuellen index immer merken. zB. in einer weiteren variablen.
Lieber ein if
Liest sich besser und man hat kein potentielles null = potentielle Exception