Pourquoi ne puis-je entrer une chaîne de caractères dans le Scanner(System.dans l'), lors de l'appel de nextLine()-méthode?
Comment ce programme fait le travail...?
import java.util.Scanner;
class string
{
public static void main(String a[]){
int a;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is ="+a);
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
La sortie est:
enter the no
1234
no is 1234
enter a string
string is= //why is it not allowing me to enter a string here?
En java, les noms de classes commencent généralement avec une majuscule -, mais je conseille vivement contre l'appel de votre classe "String".
double possible de Pourquoi n'est-ce pas pour boucle permettez-moi d'entrée de texte du premier cycle?
Aussi pour rendre ce code compile, vous devez modifier le paramètre de la méthode main pour autre chose qu'une.
double possible de Pourquoi n'est-ce pas pour boucle permettez-moi d'entrée de texte du premier cycle?
Aussi pour rendre ce code compile, vous devez modifier le paramètre de la méthode main pour autre chose qu'une.
OriginalL'auteur user1646373 | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
.nextInt()
obtient la prochaineint
, mais ne lit pas le caractère de nouvelle ligne. Cela signifie que lorsque vous lui demandez de lire la "ligne suivante", vous avez lu jusqu'à la fin de la nouvelle ligne de caractères à partir de la première fois.Vous pouvez insérer un autre
.nextLine()
après que vous obtenez leint
pour résoudre ce problème. Ou (je préfère cette façon), lire laint
dans unstring
, et de l'analyser pour unint
.Soin de m'éclairer pourquoi? Je préfère l'analyse, car elle vous permet d'attraper lorsque l'utilisateur a entré dans le texte incorrect.
Je comprends pourquoi l'analyse ne serait pas une bonne solution. Pour commencer, il est un supplément de l'opération. Mais comment peut-on aller autour de ce problème?
OriginalL'auteur NominSim
C'est un malentendu commun qui conduit à la confusion si vous utilisez le même Scanner pour nextLine() juste après que vous avez utilisé nextInt().
Vous pouvez corriger le curseur passe à la Ligne suivante par vous-même ou tout simplement utiliser un autre scanner pour votre Entiers.
OPTION A: utilisation de 2 différents scanners
OPTION B: il suffit de sauter à la Ligne suivante
Vous êtes de droite, j'ai édité ma Réponse.
OriginalL'auteur Yalla T.
Vous avez seulement besoin d'utiliser
scan.next()
de lire unString
.la numérisation.nextLine() lit une phrase jusqu'à ce que vous appuyez sur Entrée! la numérisation.next() lit un mot
OriginalL'auteur Marcelo
C'est parce qu'après la nextInt() fini de l'exécution, lorsque le nextLine() la méthode est appelée, il analyse le caractère de saut de ligne qui était présent après la nextInt(). Vous pouvez le faire de l'une des manières suivantes:
Vous pouvez utiliser la méthode suivante sur le scanner de l'objet comme
d'analyse.next();
OriginalL'auteur Apurv Pandey
Scanner de mémoire tampon pleine quand nous prenons une chaîne d'entrée par le biais de la numérisation.nextLine();
donc, il ignore l'entrée prochaine fois .
Donc la solution est que nous pouvons créer un nouvel objet de Scanner , le nom de l'objet peut être même
comme objet précédent......
OriginalL'auteur user1646373
N'essayez pas d'analyser un texte, avec nextLine(); APRÈS l'utilisation de nextInt() avec le même scanner! Il ne fonctionne pas bien avec Java Scanner, et de nombreux développeurs Java choisir de simplement utiliser un autre Scanneur pour les entiers. Vous pouvez appeler ces scanners scan1 et scan2 si vous le souhaitez.
OriginalL'auteur Umair
utiliser un temporaire
scan.nextLine();
cela permettra de consommer le caractère \nOriginalL'auteur Ajay Anto
si vous ne souhaitez pas utiliser l'analyseur :
OriginalL'auteur Melih Altıntaş
Cas où vous ne souhaitez pas utiliser nextint, vous pouvez également utiliser le tampon lecteur, où à l'aide de
inputstream
etreadline
fonction de lecture de la chaîne.OriginalL'auteur esskay
Solution Simple pour consommer le caractère \n:
OriginalL'auteur Nithin Raja
OriginalL'auteur Nizampatnam
Il renvoie d'entrée a été ignorée.
vous pouvez donc utiliser
La java.util.Scanner.nextLine() la méthode des avances de ce scanner passé la ligne en cours et retourne à l'entrée qui a été ignoré. Cette méthode renvoie le reste de la ligne courante, à l'exclusion de toute ligne de séparation à la fin. La position est définie au début de la ligne suivante. Étant donné que cette méthode est toujours à la recherche par le biais de la saisie la recherche d'un séparateur de ligne, il peut tampon toutes les entrées de la recherche pour la ligne à sauter si aucune ligne n'séparateurs sont présents.exemple tutorialspoint.com/java/util/scanner_nextline.htm
OriginalL'auteur Ami