2015-11-24 14 views
5

Ich mache eine Übung von einer Einführung in die objektorientierte Programmierung mit Java C. Thomas Wu.Delimiter-Verwendung, warum kehrt der Scanner nicht zurück?

Page 73 stellt den Code zur Verfügung, um den vollständigen Namen anzufordern, ihn mit einem Trennzeichen zu tokenisieren und zurück zu drucken.

import java.util.*; 

class Scanner1 
{ 
    public static void main(String[] args) 
    { 
     String name; 
     Scanner scanner = new Scanner(System.in); 

     scanner.useDelimiter(System.getProperty("line.separator")); 
     System.out.print("Enter full name (first, middle, last)"); 

     name = scanner.next(); 
     System.out.println("you entered " + name + "."); 
    } 
} 

Problem ist, tut mein es zu wollen, scheint zurück zu drucken, und es friert das Programm, die Verwendung von Task-Manager zwingen, um es zu schließen.

Running Program

Es kompiliert und keine Fehler präsentiert. Ich habe ein paar Mal darüber gewesen für Rechtschreibfehler usw.

IDE with Delimiter Code

zu überprüfen, ob ich das Trennfeld (letztes Bild) entfernen funktioniert es ein erstes Token bis zu ersten Platz. Der Fehler liegt also irgendwo um den Begrenzercode herum.

IDE without Delimiter Code

+8

der Code, den Sie gepostet haben, funktioniert gut für mich! Bist du sicher, dass du nach der Eingabe auf "ENTER" drückst? – ParkerHalo

+0

Überprüfen Sie Ihr Ausgabefenster .. –

+5

Scheint, ein Problem mit der IDE zu sein, die Sie verwenden. Möglicherweise ein Unterschied in Zeilentrennzeichen – 6ton

Antwort

5

Es scheint, als Konsole Ihre IDE ist nicht [Enter] Berücksichtigung einer Zeilentrenner. Der beste Weg, um zu versuchen, ob Ihr Code funktioniert, besteht darin, die kompilierte Java-Datei direkt vom Terminal (Konsole unter Windows) aus aufzurufen. Natürlich müssen Sie zuerst zu dem Verzeichnis navigieren, in dem die kompilierte Java-Datei bestehen bleibt (wo sich die Datei Scanner1.class befindet).

z. java Scanner1

Wenn Sie unabhängig sein System wünschen, ist der beste Weg, es zu tun ist, ein Muster zu erstellen, mit denen Sie das Trennzeichen definieren oder nur die in Methode .nextLine gebaut verwenden() reference to Oracle docs

public class Main { 
    //These constant fields are from .nextLine() method in the Scanner class 
    private static final String LINE_SEPARATOR_PATTERN ="\r\n|[\n\r\u2028\u2029\u0085]"; 

    public static void main(String[] args){ 
     Scanner scanner = new Scanner(System.in); 
     scanner.useDelimiter(Pattern.compile(LINE_SEPARATOR_PATTERN)); 
     System.out.print("Enter name:"); 
     String name = scanner.next(); 
     System.out.println(name); 
    } 
} 
+0

Haben Sie Ihren Code ausprobiert? –

+1

Vielen Dank für den Kommentar, jetzt sollte es funktionieren. Ich weiß nicht, warum ich das falsche konstante Feld benutzt habe. –