2013-01-22 1 views
3

Possible en double:
Scanner issue when using nextLine after nextIntProblèmes avec nextLine();

Je suis en train de créer un programme où elle permet aux valeurs entrées utilisateur dans un tableau en utilisant le scanner. Cependant, lorsque le programme demande le plus proche parent de l'étudiant, il ne permet pas à l'utilisateur d'entrer quoi que ce soit et met immédiatement fin au programme.

est Ci-dessous le code que je l'ai fait:

if(index!=-1) 
    { 
     Function.print("Enter full name: "); 
     stdName = input.nextLine(); 

     Function.print("Enter student no.: "); 
     stdNo = input.nextLine(); 

     Function.print("Enter age: "); 
     stdAge = input.nextInt(); 

     Function.print("Enter next of kin: "); 
     stdKin = input.nextLine(); 

     Student newStd = new Student(stdName, stdNo, stdAge, stdKin); 
     stdDetails[index] = newStd; 
    } 

J'ai essayé d'utiliser suivant(); mais il ne prendra que le premier mot de l'entrée de l'utilisateur qui n'est pas ce que je voulais. Y at-il de toute façon pour résoudre ce problème?

+0

'stdName = JOptionPane.showInputDialog (" Entrer le nom complet: ");' –

Répondre

9

Le problème se produit lorsque vous appuyez sur la touche Entrée, qui est un caractère de nouvelle ligne \n. nextInt() consomme uniquement l'entier, mais ignore la nouvelle ligne \n. Pour contourner ce problème, vous devrez peut-être ajouter un input.nextLine() supplémentaire après avoir lu le int, qui peut consommer le \n.

Function.print("Enter age: "); 
    stdAge = input.nextInt(); 
    input.nextLine();. 

    // rest of the code 
1

Faire appel après input.nextLine();input.nextInt(); qui se lit jusqu'à la fin de la ligne.

Exemple:

Function.print("Enter age: "); 
stdAge = input.nextInt(); 
input.nextLine(); //Call nextLine 

Function.print("Enter next of kin: "); 
stdKin = input.nextLine(); 
3

Le problème est avec le input.nextInt() cette fonction ne lit que la valeur int. Ainsi, lorsque vous continuez à lire avec input.nextLine(), vous recevez le "\ n"Entrez la clé. Donc, pour sauter cela, vous devez ajouter le input.nextLine().

Function.print("Enter age: "); 
stdAge = input.nextInt(); 
input.nextLine(); 
Function.print("Enter next of kin: "); 
stdKin = input.nextLine(); 

Pourquoi next() ne fonctionne pas ..? Next() renvoie le jeton suivant, et nextLine() renvoie NextLine. C'est bon si nous connaissons la différence. Un jeton est une chaîne de caractères non vierges entourés d'espaces blancs.

De Doc

Finds, et renvoie le jeton complet de ce scanner. Un jeton complet est précédé et suivi d'une entrée qui correspond au modèle de délimiteur. Cette méthode peut bloquer en attendant que l'entrée soit analysée, même si une invocation précédente de hasNext() a retourné true.

Questions connexes