2009-09-23 4 views
4

je suis arrivé le code suivant:Java chaînes de lecture de classe Scanner

 int nnames; 
    String names[]; 

    System.out.print("How many names are you going to save: "); 
    Scanner in = new Scanner(System.in); 
    nnames = in.nextInt(); 
    names = new String[nnames]; 

    for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.next(); 
    } 

    System.out.println(names[0]); 

Quand je lance ce code, le scanner ne ramasser le prénom et non le nom de famille. Et il sautera parfois une ligne en essayant d'entrer un nom, il apparaîtra comme si j'avais laissé le nom vide et passer au nom suivant. Je ne sais pas ce qui cause ça.

J'espère que quelqu'un peut m'aider!

EDIT: J'ai essayé in.nextLine(); il fixe les noms complets, mais il garde toujours une ligne, voici un exemple de la sortie:

How many names are you going to save: 3 
Type a name: Type a name: John Doe 
Type a name: John Lennon 
+0

Exact match de http://stackoverflow.com/questions/1466418/java-scanner-class-reading-strings – CPerkins

Répondre

8

Au lieu de:

in.next(); 

Utilisation:

in.nextLine(); 

nextLine() lit les caractères jusqu'à ce qu'il trouve un caractère de nouvelle ligne '\n'

2

Scanner.next arrête la lecture lorsqu'il rencontre un délimiteur, qui est un espace. Utilisez plutôt la méthode nextLine.

2

Après votre première nextInt(), il y a encore un vide newline dans votre entrée. ajoutez donc juste un nextLine() après votre nextInt(), puis allez dans votre boucle:

... 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
in.nextLine(); // gets rid of the newline after number-of-names 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
    System.out.print("Type a name: "); 
    names[i] = in.nextLine(); 
} 
... 

+0

+1 J'ai perdu un concours de programmation récemment parce que j'ai utilisé next() au lieu de nextLine() pour ignorer ce f Premièrement \\ n. C'était tellement stupide :( –

+0

Était-ce CodeJam, par hasard? J'ai participé cette année pour la première fois, et j'ai été écrasé - n'a même pas réussi à faire le tour 2. Mais je me suis amusé dans le qual et tour 1, et Je serai de retour l'année prochaine. – CPerkins

-1

Essayez d'utiliser:

System.out.println() 

Au lieu de:

System.out.print() 
Questions connexes