Java: Kann es sein, dass man keine Variable in Java innerhalb einer for-Schleife definieren und dann die Variable außerhalb verwenden kann?

Das Ergebnis basiert auf 9 Abstimmungen

Ja kannst du nicht 78%
Was anderes/du bist einfach nur doof 22%

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Eine Variable kann nur in dem Kontext verwendet werden, in dem sie deklariert wurde. Beachte, dass es einen Unterschied zwischen Deklaration (Bekanntmachen der Variable) und Definition (Wertzuweisung) gibt.

Beispiel:

int someVariable; // declaration
someVariable = 0; // definition

for (int i = 0; i < 1; ++i) {
  someVariable = 2; // definition

  int otherVariable = 3; // declaration + definition
}

System.out.println(someVariable);
System.out.println(otherVariable); // error, otherVariable is unknown
  • Die Variable someVariable ist vor, in und nach der Schleife bekannt, denn sie wurde in diesem Kontext auch deklariert.
  • Die Variable i ist nur für das Schleifenkonstrukt bekannt, denn sie wurde im Schleifenkopf deklariert. Sie wird erst aus dem Speicher entfernt, sobald der Programmfluss komplett aus der Schleife ausbricht.
  • Die Variable otherVariable ist nur innerhalb des Schleifenkörpers bekannt, denn sie wird in diesem deklariert. Mit jeder Wiederholung des Schleifenkörpers wird sie neu angelegt und nach Abarbeitung gleich wieder gelöscht.
Warum sollte ich sonst Ergebnis nicht mit Ergebnis und einem weiterem substring zuweisen dürfen?

Der Compiler wertet nicht den tatsächlichen Schleifenverlauf aus, sondern betrachtet jeden Programmzweig, den eine Kontrollstruktur eröffnet, als möglichen Programmverlauf. Das heißt die Schleifenbedingung könnte sowohl zutreffen oder auch nicht. Wenn sie nicht zutrifft, wird der Schleifenkörper nie durchlaufen und somit auch nie die String-Variable definiert (die Variable existiert, doch sie zeigt auf keinen Wert, auch nicht null). Das bedeutet wiederum, dass es einen Programmverlauf geben könnte, in dem du versuchst, einen undefinierten Wert mit einen anderen Wert zu verknüpfen. Das ist nicht möglich.

Um das Problem zu lösen, solltest du der String-Variable einen Startwert geben. Du kannst ihr beispielsweise einen leeren String zuweisen.

Ja kannst du nicht
Hey, kann es sein, dass man keine Variable in Java innerhalb einer for-Schleife definieren kann und dann außerhalb die Variable verwenden kann?

Du kannst dir jede geschweifte Klammer als Beginn bzw. Ende einer Schachtel vorstellen. Du kannst dann sozusagen mehrere Schachteln erstellen, welche auch in einer anderen Schachtel liegen können, das nennt man auch Verschachtelung.

Stell dir vor, dass eine Variable, die in einer Schachtel deklariert wurde auch nur dort aufgerufen werden kann. Das heißt auch, dass diese Variable auch von Schachteln innerhalb dieser Schachtel aufgerufen werden können, weil diese ja auch in der Schachtel ist, allerdings nicht andersrum.

Was anderes/du bist einfach nur doof

Du erstellst die Ergebnis-Variable ja außerhalb der Schleife, also daran liegt es nicht.

Das Problem hier ist, dass Ergebnis nach der Schleife noch uninitialisiert sein könnte. Also noch keinen Wert haben könnte.
Nämlich dann, wenn die Schleife ein einziges mal durchlaufen wurde, weil KleinereLaenge 0 ist.

Gib Ergebnis einen Standard-Wert, z.B.

String Ergebnis = "";

dann sollte es stimmen.

Sollte dir deine IDE aber sowieso sagen, wenn du mal mit der Maus über das rot unterstrichene Wort gehst. Da sollte dann sowas wie "Variable might not have been initialized" stehen.

Variablennamen schreibt man übrigens klein. Hat den Vorteil, dass man sie dadurch von Klassen-Namen unterscheiden kann. "KleinereLaenge" also bitte umbenennen zu "kleinereLaenge", selbiges bei "ergebnis".

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
Ja kannst du nicht

Jede Variable die innerhalb eines {}-Blocks definiert ist, ist innerhalb dieses Blocks definiert und außerhalb nicht.