Hmm, jetzt haben wir hier Antworten ohne Kontext. Das ist sowas von bescheiden ....
@Robert Zenz Ist das was für Dich oder hast Du sowas schon?
Also an der Stelle einfach einmal paar Informationen rund um das Thema Scanner:
a) Wenn man versucht, Werte in einem bestimmten Format (z.B. einen Integer mittels nextInt()), dann kann es zu Exceptions kommen. Eine falsche Eingabe wie "Hallo" ist nun einmal keine Zahl. Daher macht es Sinn, vorab zu prüfen, ob eine Zahl vorhanden ist. Wenn keine Zahl vorhanden ist, dann muss man die falsche Eingabe erst entfernen. Hier kann man sich die Eingabe wie ein Stapel Papiere vorstellen: Scanner schaut dann sozusagen auf das oberste Papier und sieht "Hallo" und das ist keine Zahl. Der Zettel mit "Hallo" bleibt aber auf dem Stapel liegen. Daher sind hier paar Dinge wichtige:
a1) So eine Exception kann man sich vorstellen, wie ein Kind, das sich schreiend auf den Boden wirft. Das will man als Elternteil nicht. Man kann damit umgehen aber das ist nichts, das man provozieren möchte. Beim Programmieren bedeutet das, dass man mögliche Probleme wie fehlerhafte Eingaben, vorab prüft.
a2) Das führt dazu, dass man - wenn man bei der visuellen Darstellung mit dem Papierstapel bleibt - erst prüft, ob auf dem obersten Zettel eine Zahl steht. Wenn ja, dann liest man die ein und verarbeitet so den Zettel. Wenn nicht, dann verarbeiten wir den Zettel anders, also lesen z.B. den Text des Zettels und sagen: "Hey, 'Hallo' ist keine gültige Zahl!"
b) Generell ist es so, dass viele Klassen, die AutoCloseable implementieren, nach Verwendung geschlossen werden sollen. Dies liegt einfach daran, dass diese Klassen in der Regel irgend welche Ressourcen blockieren und die will man nach der Nutzung wieder frei geben. Das führt zu der Regel: Schließe alle AutoCloseables so Du diese erzeugt hast.
Dazu gibt es dann in Java sogar ein spezielles "try-with-resources", damit sicher gestellt ist, dass wirklich close aufgerufen wird.
Diese Regel ist aber so leider viel zu einfach und daher so in der Form nur bedingt tauglich. So z.B. hier: Das Schließen des Scanners würde auch System.in schließen. Und eine große Einschränkung war, dass man nur schließt, was man selbst erzeugt hat. Das kannst Du Dir so vorstellen wie das zum Recyclen geben von Dingen. Das machst Du nur mit Dingen, die Dir gehören! Etwas, das Du nur geliehen hast, gibst Du nicht weg zum recyclen!
c) Ein weiterer wichtiger Punkt bei Scannern ist das Verhalten der diversen Methoden. Denn es gibt zwei Typen von Methoden:
c1) Token basierte Methoden. Dies sind next, nextInt, ... Es wird genau ein Wert gelesen und der Rest bleibt
c2) Zeilen basierte Methoden. Dies ist nextLine. Hier wird bis einschließlich einem Zeilenumbruch alles gelesen.
Das Mischen dieser Methoden ist problematisch. Dies möchte ich anhand eines Beispiels aufzeigen. Wichtig ist dabei, dass Eingaben nacheinander in einem sogenannten Stream geliefert werden. Wenn ich also "Hallo" eingebe und dann Enter drücke, dann habe ich in diesem Stream 'H', 'a', 'l', 'l', 'o', '\n'
nextLine() würde alle diese Zeichen entnehmen und "Hallo" zurück geben. Der Stream ist dann leer.
next() würde nur das nächste Token einlesen, also bis zu einem Leerzeichen oder Zeilenumbruch. Da würde also das "Hallo" gelesen und zurück gegeben, aber der Zeilenumbruch würde bleiben!
Nun machen wir ein Beispiel: Wir wollen wissen, wieviele Elemente von einem Produkt gekauft werden sollen. Dazu wollen wir erst die Anzahl lesen (nextInt) und dann, was gekauft werden soll: nextLine().
Also die Eingabe wird dann sein: Erst z.B. "5" + Enter und dann "rote Äpfel" + Enter.
Spielen wir dies nun einmal durch:
Wir kommen zum ersten nextInt(). Angenommen es gab noch keine Eingaben, dann hält das Programm an und ich kann eingeben "5\n".
Die "5" wird entnommen, das "\n" bleibt übrig in dem Eingabestream und es wird 5 zurück gegeben.
Nun kommen wir zum nextLine(). Da wir aber noch das "\n" im Eingabestream haben, wird nicht auf eine Eingabe gewartet sondern es wird das "\n" gelesen und ein leerer String wird zurück gegeben.
Daher ist es notwendig, dass man beim Wechsel von Token basierter Eingabe hin zu Zeilen orientierter Eingabe ein nextLine() aufruft ohne den Inhalt auszuwerten.
Das alles sind Dinge, die aber nur wichtig werden, wenn man ein wirkliches Programm schreibt. Wenn man aber gerade dabei ist, das Programmieren zu lernen und erst einmal nur die Java Syntax und die generelle Vorgehensweise lernen will, dann ist das alles natürlich komplett egal! Wenn man da beim Einlesen einer Zahl "Hallo" schreibt, dann darf das Programm mit einer für Anwender unverständlichen Meldung schlicht abstürzen.
Daher darf das natürlich hier bei der Aufgabe komplett ignoriert werden!