Comment fonctionne ce programme ...?
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?
.nextInt()
obtient la prochaine int
, mais ne lit pas le caractère de nouvelle ligne. Cela signifie que lorsque vous lui demandez de lire la "ligne suivante", vous lisez jusqu'à la fin du caractère de la nouvelle ligne à partir de la première fois.
Vous pouvez insérer une autre .nextLine()
après avoir obtenu la int
pour résoudre ce problème. Ou (je préfère cette façon), lisez la int
dans une string
et analysez-la en une int
.
Il s'agit d'un malentendu courant qui crée de la confusion si vous utilisez le même Scanner pour nextLine () juste après avoir utilisé nextInt ().
Vous pouvez corriger le curseur en sautant par vous-même sur la ligne suivante ou simplement utiliser un autre scanner pour vos entiers.
OPTION A: utilisez 2 scanners différents
import Java.util.Scanner;
class string
{
public static void main(String a[]){
int a;
String s;
Scanner intscan =new Scanner(System.in);
System.out.println("enter a no");
a=intscan.nextInt();
System.out.println("no is ="+a);
Scanner textscan=new Scanner(System.in);
System.out.println("enter a string");
s=textscan.nextLine();
System.out.println("string is="+s);
}
}
OPTION B: il suffit de sauter à la ligne suivante
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);
scan.nextLine();
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
En effet, après l'exécution de nextInt (), lorsque la méthode nextLine () est appelée, elle analyse le caractère de nouvelle ligne qui était présent après nextInt (). Vous pouvez le faire de l’une des manières suivantes:
Vous pouvez utiliser la méthode suivante sur l’objet scanner en tant que
scan.next ();
Il suffit d’utiliser scan.next()
pour lire une String
.
utiliser un temporaire scan.nextLine();
cela utilisera le caractère\n
N'essayez pas de numériser du texte avec nextLine (); APRÈS utiliser nextInt () avec le même scanner! Cela ne fonctionne pas bien avec Java Scanner et de nombreux développeurs Java optent pour un autre scanner pour les entiers. Vous pouvez appeler ces scanners scan1 et scan2 si vous le souhaitez.
La mémoire tampon du scanner est pleine lorsque nous prenons une chaîne d'entrée via scan.nextLine (); Elle saute donc l'entrée la prochaine fois . Ainsi, nous pouvons créer un nouvel objet Scanner. idemobjet précédent ......
si vous ne voulez pas utiliser l’analyseur:
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);
scan.nextLine(); // This line you have to add (It consumes the \n character)
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is=" + s);
Solution simple pour utiliser le caractère\n:
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);
scan.nextLine();
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
Si vous ne voulez pas utiliser nextint, vous pouvez également utiliser un lecteur en mémoire tampon, où les fonctions inputstream
et readline
lisent la chaîne.
import Java.util.*;
public class ScannerExample {
public static void main(String args[]) {
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.next();
System.out.println("string is=" + s);
}
}