Question

Ce que je veux faire, c'est demander à l'utilisateur un certain nombre de chaînes à lire dans un tableau, puis l'inviter à entrer ce nombre de chaînes et à les lire dans le tableau. Lorsque j'exécute ce code, il ne me demande jamais de saisir le premier cycle de la première boucle, mais affiche simplement "Chaîne n ° 0: Chaîne n ° 1:". et puis je peux saisir du texte. Pourquoi est-ce cela et qu'est-ce que j'ai mal fait?

import java.util.Scanner;

public class ovn9 
{
public static void main(String[] args)
{
    Scanner sc=new Scanner(System.in);

    System.out.print("Number of inputs: ");

    int lines= sc.nextInt();
    String[] text=new String[lines];

    for(int x=0; x<text.length; x++)
    {
        System.out.print("String #"+x+": ");
        text[x] = sc.nextLine();
    }

    for(int y=0; y<text.length; y++)
        System.out.println(text[y]);

}
}
Était-ce utile?

La solution

Mise en mémoire tampon.

nextInt () ne consomme pas la nouvelle ligne dans le tampon d'entrée qui y a été placé lors de la saisie du nombre d'entrées. Dans l'itération 0 de la boucle for, il y a déjà une ligne d'entrée dans le tampon et nextLine () peut se terminer immédiatement et le programme attendra la nouvelle ligne d'entrée uniquement dans l'itération 1. Ignorer la nouvelle ligne dans l'entrée, vous pouvez ajouter un autre appel nextLine () avant d'entrer dans la boucle for.

Autres conseils

Peut-être devriez-vous changer votre boucle pour utiliser 'sc.next ()'

for ( int x = 0; x < lines; x++ ) {
    System.out.print("String #" + x + ": ");
    text[x] = sc.next();
}

Cela peut être expliqué par l'API Java

Chaîne next (): recherche et renvoie le prochain jeton complet de ce scanner.

String nextLine (): fait avancer ce scanner au-delà de la ligne actuelle et renvoie l'entrée qui a été ignorée.

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