Informatik Frage zu Arrays?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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;
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
Palladin007  03.10.2022, 23:47

Lieber ein if
Liest sich besser und man hat kein potentielles null = potentielle Exception

0
MrAmazing2  03.10.2022, 23:53
@Palladin007

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.

0
Palladin007  04.10.2022, 00:09
@MrAmazing2
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.

1
Von Experte MrAmazing2 bestätigt

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.

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Studium der Informatik (B.Sc.)

in dem falle müsstest du dir den aktuellen index immer merken. zB. in einer weiteren variablen.

Woher ich das weiß:Berufserfahrung – Berufserfahrung