Compiler-Fehler Scanner java.util NoSuchElementExeption

Sorainthy

Mitglied
Hallo zusammen,

ich schreibe gerade an einer kleinen CMD Version meines ersten "großen" Programms und bin auf einen unerwarteten Fehler gestoßen...

Erläuterung:
In meinem Programm werde ich verschiedene Kunden verwalten und je nach Kunde ein spezielles Programm starten. Angefangen habe ich mit der Erstellung der Kunden. Allerdings erhalte ich den oben genannten Fehler in der Main Funktion.
Ich lasse den Benutzer eine Zahl stellvertretend für den Aufruf einer Funktion eingeben. Diese Zahl wird per switch überprüft und startet das entsprechende Programm.
In meinem Fall: CreateCustomes. Hier gibt es ebenfalls einen Scanner und es scheint so, als ob die While Schleife auf den neuen Scanner reagiert sobald nextInt() aufgerufen wird.....

Ich hab mal allen unnötigen Code entfernt:
Java:
//Main
package programme;
import java.util.Scanner;
import klassen.Customer;


/*
 * Folgende Optionen soll der Benutzer der CMD haben

 * 3. Erstellen von Customer
*/

public class Main {
	public static void main(String[] args){
		int command = 0;
		Scanner keyboard;
	
		keyboard = new Scanner(System.in);
		//Solange command != 8 Programm laufen lassen!
		while(command != 9){
			System.out.println("Was möchten Sie tun?");
			System.out.println("1: Laden von Tracks und Customer, 2: Erstellen von Tracks, 3: Erstellen von Customern,");
			System.out.println("");
			System.out.println("Bitte wählen Sie zwischen 1 und 9: "); //Natürlich habe ich die anderen Zahlen entfernt
			command = keyboard.nextInt();
			
			switch(command){			
					
				case 3:
					System.out.println("CreateCustomer");
					CreateCustomer.CreateCustomers();
					break;
					
			
					
				default:
					if(command == 0 || command > 9){
						System.out.println("Sie haben keinen gültigen Wert eingetragen!");
					}
					break;			
			}
		}
		//Vor dem Beenden des Programms den Scanner schließen
		keyboard.close();
		System.out.println("Auf Wiedersehen!");
	}
}

Java:
//CreateCustomer
package programme;
import klassen.Customer;

import java.util.Scanner;


public class CreateCustomer {
	public static void CreateCustomers(){
		//Initialisieren des Scanners und der Customer Attribute
		Scanner newKeyboard = new Scanner(System.in);
		String name;
		String ip;
		int port;
		String track;
		
		//Einlesen der Attribute
		System.out.println("Bitte geben Sie einen Namen ein: ");	
		name = newKeyboard.nextLine();
		
		System.out.println("Bitte geben Sie eine IP ein: ");
		ip = newKeyboard.nextLine();
		
		System.out.println("Bitte geben Sie einen Port ein: ");
		port =  newKeyboard.nextInt();
		//Nach Eingabe des Ports erscheint der Fehler!
		System.out.println("Bitte geben Sie einen Track ein ");
		track =  newKeyboard.nextLine();
		
		//Erstellen des neuen Customers
		Customer.customers.add(new Customer(name, ip, port, track));
		
		//Ausgabe des Customers und Funktionsende
		System.out.println("Kunde " + Customer.customers.get(Customer.getArrayCount()).getName() + "wurde erstellt!");
		System.out.println("Kundendetails:");
		System.out.println("ID: " + Customer.customers.get(Customer.getArrayCount()).getIdent());
		System.out.println("Name: " + Customer.customers.get(Customer.getArrayCount()).getName());
		System.out.println("IP: " + Customer.customers.get(Customer.getArrayCount()).getIP());
		System.out.println("Port: " + Customer.customers.get(Customer.getArrayCount()).getPort());
		System.out.println("Track: " + Customer.customers.get(Customer.getArrayCount()).getTrack());
		System.out.println("");
		newKeyboard.close();
		
	}

}

Mit wird auch als Ursprung des Fehlers Zeile 34 der Main angeben.... aber hier ist nur:
command = keyboard.nextInt();

Was noch lange noch nicht ablaufen sollte, da der Switch Case 3 ja eine Funktion aufruft und erst dann zum Break gehen sollte, wenn der Case abgearbeitet wurde....

Bitte nicht auf die Fehlenden catch Anweisungen achten. Lerne erst noch Java und bin noch nicht soweit ;)

Vielen Dank schonmal.

Grüße,

Sorainthy
 

fLooojava

Bekanntes Mitglied
So wie es aussieht versuchst du zu lesen, obwohl gar nichts mehr vorhanden ist.
Deshalb wirft dir
Java:
command = keyboard.nextInt();
eine Exception - da du quasi immer versuchst zu lesen.

Versuch mal mit
Java:
keyboard.hasNext();
abzufragen ob überhaupt ein Wert vorhanden ist.

Du führst diesen Codeabschnitt ja solange aus, bis dein Integer "command" 9 ist...
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Java:
 ...
		newKeyboard.close();	
	}
}

Hier in der CreateCustomer Klasse liegt dein Problem. Du schließt den System.in Stream. Das führt dazu das dieser Stream keinen Wert mehr liefert und somit der Scanner in deiner Main-Klasse keinen neuen Input mehr erhält.

Lösche diese Zeile oder kommentier sie aus und dann gehts auch schon.
 

Sorainthy

Mitglied
Hallo zusammen,

erstmal Danke für eure Antworten! Werde damit spielen, sobald ich wieder auf den Code zugreifen kann (spätestens Sonntag). Allerdings hätte ich zu beiden Posts noch Fragen:

@fLooojava
Warum sollte command = nextInt(); IMMER Lauschen, wenn dies erst IN der Schleife passiert?
Egal wie ich es drehe und Wende -> Das Programm sollte die Main aktuell "Pausieren" da es sich in einer Unterfunktion befindet! Weit weg vom nächsten While Durchlauf...

@Flown
Wieso soll/kann ein Scanner einer Unterfunktion den Scanner der Hauptfunktion schließen? Dies würde ganz und gar nicht in das CallByValue-Konzept von Java passen da ich weder den Scanner Übergebe noch diesen außerhalb der Main verwenden können sollte...
Außerdem kommt der close Befehl eigentlich nach zwei weiteren Scanns (Port welche den Fehler verursacht und Track was gar nicht abgefragt wird!).

Sind nur Verständnisfragen, mag nicht einfach korrigieren ohne zu verstehen :)
Werde wie gesagt wieder mit dem Code Spielen, wenn ich Zugriff drauf habe. Bin Aktuell nur mit einem Chromebook unterwegs.
 
Zuletzt bearbeitet:

MR_UNIX

Bekanntes Mitglied
Es wird auch nur der Scanner der jeweiligen Methode geschlossen. Trotzdem nutzen beide Scanner den gleichen Stream im Hintergrund und so weit ich weiß reicht das close() vom Scanner das auch gleich an den Stream weiter. Sprich auf System.in wird auch close() aufgerufen und dann ist halt Schluss.
 

Sorainthy

Mitglied
Lag tatsächlich an dem Scanner.close();

Allerdings habe ich nun ein anderes Problem (selber Code nur ohne newKeyboard.close();)
Nach der Port Eingabe arbeitet er alle weiteren Befehle ab, jedoch OHNE mich nach dem Track zu fragen.
Es erscheint zwar: "Bitte geben Sie einen Track ein" jedoch springt er direkt im Code weiter und erstellt das Objekt. Natürlich ohne einen Track...

Sieht jemand warum?

Grüße,

Sorainthy
 

fLooojava

Bekanntes Mitglied
Das Problem liegt hier bei
Java:
port =  newKeyboard.nextInt();
.

Du liest hier die int Eingabe vom User. Wenn du nun weiterliest mit
Java:
newKeyboard.nextLine()
erhälst du aufgrund der Entereingabe "\n". Deshalb wird dies übersprungen.


flo
 

Sorainthy

Mitglied
Danke!
Mir fällt grad kein eleganterer Weg ein, als die Int Anweisung ans Ende zu schreiben...

Edit:
Natürlich newKeyboard.nextLine() ohne Zuweisung.... hat sich damit auch erstmal erledigt!

Vielen Dank nochmal an alle!
 
Zuletzt bearbeitet:

MR_UNIX

Bekanntes Mitglied
Es würde auch gehen, dass du überall nextLine() nimmst und die Eingabe entsprechend umwandelst. Integer.parseInt() wäre bspw. die Methode, mit der du aus dem eingelesenen String ein Integer basteln kannst. Wäre meiner Meinung nach eleganter als einmal "leer" einzulesen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
F java.util.scanner wird übersprungen Java Basics - Anfänger-Themen 9
O java.util.Scanner hängt sich auf Java Basics - Anfänger-Themen 5
Luk10 Java.util.Scanner Java Basics - Anfänger-Themen 11
H ArrayList über java.util.Scanner füllen Java Basics - Anfänger-Themen 5
T import java.util.scanner cannot be resolved Java Basics - Anfänger-Themen 19
J Eclipse und printf und import util.java.scanner; Java Basics - Anfänger-Themen 4
T Möchte Charwert 23C° mit java.util.Scanner einlesen macht Pr Java Basics - Anfänger-Themen 2
M java.util.Scanner kann nicht aufgelöst werden - warum nicht? Java Basics - Anfänger-Themen 4
K Keine weitere (java.util.)Scanner Eingabemöglichkeit? Java Basics - Anfänger-Themen 5
A wie implementiere ich java.util.Scanner? Java Basics - Anfänger-Themen 12
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
D Java Scanner Java Basics - Anfänger-Themen 9
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
T Problem mit java-editor + Scanner Java Basics - Anfänger-Themen 9
N Java Scanner HILFE :D Java Basics - Anfänger-Themen 9
S Java Scanner auf Zahlen/Numerische Zeichen überprüfen Java Basics - Anfänger-Themen 15
B Java Scanner Zahl einlesen Java Basics - Anfänger-Themen 4
S Klasse Scanner unter Java nicht gefunden Java Basics - Anfänger-Themen 3
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben