2015-11-24 16 views
5

Sto facendo un esercizio da un'introduzione alla programmazione orientata agli oggetti con Java C. Thomas Wu.Utilizzo del delimitatore, perché Scanner non restituisce?

Page 73 fornisce il codice per richiedere il nome completo, assegnarlo tramite delimitatore e ristamparlo.

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 + "."); 
    } 
} 

Il problema è che il mio ha colpiti particolarmente sembrano voler stampare indietro, e si blocca il programma, costringendo l'uso di task manager per chiuderla.

Running Program

Compila e non presenta errori. Sono stato più di un paio di volte per verificare la presenza di errori di ortografia ecc

IDE with Delimiter Code

Se rimuovo la sezione delimitatore (ultima foto) funziona un primo token fino a primo spazio. Quindi l'errore giace da qualche parte attorno al codice delimitatore.

IDE without Delimiter Code

+8

il codice che hai postato funziona bene per me! sei sicuro di aver premuto "INVIO" dopo l'input? – ParkerHalo

+0

controlla la tua finestra di output .. –

+5

Sembra essere un problema con l'IDE che stai utilizzando. Forse una differenza nei separatori di linee – 6ton

risposta

5

Sembra come console del vostro IDE non sta prendendo in considerazione [Invio] un separatore di linea. Il modo migliore per provare se il tuo codice funziona è chiamare il file Java compilato direttamente dal terminale (console su Windows). Naturalmente, in primo luogo è necessario navigare nella directory in cui persiste il file Java compilato (dove si trova il file Scanner1.class).

E.g. java Scanner1

Se vuoi essere indipendente dal sistema, il modo migliore per farlo è quello di compilare un modello con il quale si definisce il delimitatore o semplicemente utilizzare il costruito nel metodo di .nextLine() 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

Hai provato il tuo codice? –

+1

Grazie per il commento, ora dovrebbe funzionare. Non so perché ho usato il campo costante sbagliato. –

Problemi correlati