web-dev-qa-db-fra.com

Pourquoi ne puis-je pas entrer une chaîne dans Scanner (System.in) lorsque j'appelle la méthode nextLine ()?

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?
7
user1646373

.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.

16
NominSim

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);
    }
}
4
Yalla T.

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:

  1. Vous pouvez utiliser une autre méthode nextLine () juste après nextInt () pour déplacer le scanner au-delà du caractère de nouvelle ligne.
  2. Vous pouvez utiliser différents objets Scanner pour analyser l'entier et la chaîne (vous pouvez les nommer scan1 et scan2).
  3. Vous pouvez utiliser la méthode suivante sur l’objet scanner en tant que

    scan.next ();

2
Apurv Pandey

Il suffit d’utiliser scan.next() pour lire une String.

2
Marcelo

utiliser un temporaire scan.nextLine(); cela utilisera le caractère\n

1
Ajay Anto

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.

1
Umair

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 ...... 

1
user1646373

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);
0
Melih Altıntaş

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);
    }
}
0
Nithin Raja

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.

0
esskay
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);
    }
}
0
Nizampatnam