Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
In der "kurzen" Variante hast du halt keinen Zugriff mehr auf den Scanner wenn du ihn für mehrere/andere aufrufe benötigst. Zudem führst du kein "close()" auf dem Scanner aus.
Das könnte man dann z.B. mit einem AutoClose "try" Block erreichen, aber meine Meinung: Versuch als Anfänger erst mal nicht auf biegen und brechen "Abkürzungen" zu nehmen.
Die "kurze" Variante erzeugt ein "anonymes" Scanner-Objekt, auf dem du danach die Methode next() aufrufst. Anschließend hast du keinen Zugriff mehr auf das Objekt und es wird vom GC irgendwann entfernt. Die erste Variante ist also immer vozuziehen, wenn du mehrfach auf den Scanner zugreifen möchtest. Dann muss die Variable "scan" allerdings auch einen entsprechenden Gültigkeitsbereich haben, z. B. als Instanzvariable.
Bzgl. des close(): schließe nichts, was Du nicht selbst geöffnet hast. Durch das Schließen des Scanners schließt Du automatisch auch die Standardeinabe, was in der Regel nicht erwünscht ist.
Bzgl. des close(): schließe nichts, was Du nicht selbst geöffnet hast. Durch das Schließen des Scanners schließt Du automatisch auch die Standardeinabe, was in der Regel nicht erwünscht ist.
Wobei er ja den Scanner selbst erstellt hat und daher ist er für den Scanner und streng genommen für das schließen verantwortlich. Scanner ist nur blöd, da wir ja eben den zugrunde liegenden Stream System.in nicht schließen wollen.
Mein Ratschlag wäre daher immer eine public static final Variante, die einem eine Scanner Instanz gibt um diese dann innerhalb der Text-Oberfläche zu nutzen ...
Naja .. So an Dampf verbrennt man sich nun einmal leicht die Finger ... daher vermeide ich alles, was mit Dampf angetrieben wird
*SCNR*
Also die Konstellation bei Streams ist normalerweise durchaus so, dass man diese ja nur genau einmal verarbeitet ...
Bei C# fand ich es übrigens immer recht interessant - je nach verwendeter statische Codeanalyse wurde man verhauen, weil man bei so einer "Verschachtelung"
- nicht alles sauber geschlossen hat.
- etwas mehrfach geschlossen wurde.
(also Konstellation B bekommt A und schließt A nun mit. Wenn man nun beides schließt, dann konnte zweites gemeckert werden. Wurde nur B geschlossen, dann konnte A angemeckert werden, weil das nicht explizit geschlossen wurde ...)