Question

Je suis le code suivant:

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.nextLine();
}

Et la sortie de ce code est le suivant:

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

Remarquez comment il a sauté la première entrée de nom ?? Il a sauté et est allé directement pour la deuxième entrée du nom. Je l'ai essayé de regarder ce qui cause cela, mais je ne semble pas être en mesure de le clouer. J'espère que quelqu'un peut me aider. Merci

Était-ce utile?

La solution

La raison de l'erreur est que le nextInt tire que l'entier, et non la nouvelle ligne. Si vous ajoutez un in.nextLine () avant votre boucle, il mangera la nouvelle ligne vide et vous permettre d'entrer dans 3 noms.

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];
in.nextLine();
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}

ou tout simplement lire la ligne et analyser la valeur comme un entier.

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());

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

Autres conseils

utiliser sc.nextLine (); deux fois pour que nous puissions lire la dernière ligne de chaîne

sc.nextLine () sc.nextLine ()

Il est parce que le in.nextInt () ne change pas de ligne. Donc, vous devez d'abord « entrez » (après avoir appuyé sur 3) Parce que le endofline lu par votre in.nextLine () dans votre boucle.

Voici un petit changement que vous pouvez faire:

int nnames;
    String names[];

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

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

parce que in.nextInt () reçoivent un nombre int, ne reçoit pas une nouvelle ligne. Donc, vous entrez 3 et appuyez sur « Entrée », la fin de la ligne est lu par in.nextline ().

Voici mon code:

int nnames;
String names[];

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

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

Vous auriez pu simplement remplacer

names[i] = in.nextLine(); avec names[i] = in.next();

Utilisation suivante () retournera seulement ce qui vient avant un espace. nextLine () déplace automatiquement le scanner vers le bas après le retour de la ligne courante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top