Dankeschön für die schnelle Antwort. Habe ich mir auch bald gedacht. Also sind die Variablen innerhalb einer Schleife nur für die Schleife bestimmt? Habe ich eine Möglichkeit diese auch außerhalb noch zu verwenden?Auf die Schnelle: weil die Variablen eingabe... ausserhalb der Schleife nicht bekannt sind (Stichwort: Scope)
Es ist "noch schlimmer": eine Variable hat nur innerhalb des Blocks (und aller darin befindlichen Blöcke), in dem sie deklariert wurde, Gültigkeit. Innerhalb von Methoden spielt außerdem die Stelle der Deklaration im Code eine Rolle.Also sind die Variablen innerhalb einer Schleife nur für die Schleife bestimmt?
Hatte das im Tutorial so gelerntPS.: Einen Scanner von System.in zu schließen ist nicht unbedingt ratsam, es ist eine Resource der JVM und du wirst auf Probleme stoßen, falls du nochmal von System.in lesen wollen würdest.
Der Scope gilt ab der Deklaration bis zum Ende des umgebenen Blocks. Du wirst also nicht umhinkommen deiner Variablen eine größere Sichtbarkeit zu spendieren.Dankeschön für die schnelle Antwort. Habe ich mir auch bald gedacht. Also sind die Variablen innerhalb einer Schleife nur für die Schleife bestimmt? Habe ich eine Möglichkeit diese auch außerhalb noch zu verwenden?
Einfache Regel: schließe nichts, was Du nicht selbst geöffnet hast.Hatte das im Tutorial so gelernt![]()
So einfach finde ich die Regel nicht. Es wird ja (vordergründig) nur der Scanner geschlossen, der auch selber erzeugt wurde. Man muss dann schon wissen, dass beim Schließen des Scanners automatisch auch der benutzte Stream (System.in) geschlossen wird.Einfache Regel: schließe nichts, was Du nicht selbst geöffnet hast.
Bin gerade etwas hin- und hergerissen. Auf der einen Seite stimmt das natürlich, auf der anderen Seite sollte man schon wissen, was der Code macht, den man schreibt.Man muss dann schon wissen, dass beim Schließen des Scanners automatisch auch der benutzte Stream (System.in) geschlossen wird.
Naja es wird sonst bei mir gelb unterstrichenBin gerade etwas hin- und hergerissen. Auf der einen Seite stimmt das natürlich, auf der anderen Seite sollte man schon wissen, was der Code macht, den man schreibt.
So wie ich weiß, dass System.out.println etwas über die Standardausgabe ausgibt, muss ich halt auch wissen, dass das Schließen des Scanners den verwendeten Stream schließt. Das ist alles dokumentiertes Verhalten.
Weiß ich dagegen, dass das Schließen des Scanners auch den Stream schließt, bringt mir das erstmal nicht viel. Hier greift dann eben die Regel, nichts zu schließen, was man nicht selbst geöffnet hat.
Alles dann doch nicht so einfach![]()
Ja, Du wirst gewarnt, was so viel heißt wie: hier ist was, was in der Regel anders aussieht, schau Dir das bitte genauer an. Eine solche Warnung spuckt z. B. der Eclipse-Compiler (der OpenJDK-Compiler dagegen nicht) aus, wenn ein Closeable nicht geschlossen wird.Naja es wird sonst bei mir gelb unterstrichen
@SuppressWarnings("resource")
annotieren, dann dürfte die Warnung an der Stelle nicht mehr auftauchen.