mikrocontroller.net

Forum: PC-Programmierung Java: EIngabe per Scanner wirft Exception


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: JavaNeuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist nicht ganz klar, warum der untenstehende Code nur bis zur ersten 
Eingabe läuft und dann eine Exception wirft:
Exception in thread "main" java.util.NoSuchElementException
  at java.util.Scanner.throwFor(Scanner.java:862)
  at java.util.Scanner.next(Scanner.java:1371)
  at Input.inp(Input.java:13)
  at Input.main(Input.java:26)

Hier der Programmcode eines Übungsbeispieles, bei dem eine 
Konsolen-Eingabe per Scanner-Klasse in eine Methode verpackt wurde:
import java.util.Scanner;


public class Input
{
  public static void prn(String txt){
    System.out.println(txt);}
  
  public static String inp(String hinw){
    System.out.print(hinw);
    Scanner sc = new Scanner(System.in); //öffnet das File "System.in";
    String s = sc.next(); //liest Alles ein, bis Return
    sc.close(); //schließt Scanner
    return s;
  }
  
  public static void main(String[] args){
    
    String erg;
    
    erg=inp("Vorname: ");
    prn(erg);
    
    erg=inp("Nachname: "); //<--- hier kracht es
    prn(erg);      
  }
}

Danke sehr für Hinweise.

Autor: JavaNeuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe inzwischen herausgefunden, dass die Exception ausbleibt, wenn ich 
auf "sc.close();" verzichte. Aber wieso? Der Scanner sc wird doch mit 
jedem Aufruf von inp() sowieso neu erstellt?

Autor: Franko S. (frank_s866)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil das den Stream auch gleich mit schliesst beim nächsten Aufruf gibt 
es deshalb einen Fehler.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.