J'ai écrit un code pour prendre des entrées de chaîne et stocker dans une matrice à chaîne en Java. Mon problème est que lorsque je déclare la taille de la matrice de chaîne comme 3, il doit prendre trois chaînes dans une matrice de chaîne, mais elle ne prend que deux chaîne dans le tableau de cordes et n'accepte pas le troisième. Quelqu'un peut-il m'aider à résoudre le problème?
enter length of string
3
enter string values
one
two
one
two
4 Réponses :
Vous devez ajouter sc.nextline () code> avant de commencer la lecture de la chaîne d'entrée de la console.
one
two
three
Lorsque vous lisez un int code> et que vous souhaitez lire une chaîne code> complète code>, vous devez déplacer un pointeur à l'intérieur
scanner code> à la suivante ligne. PS STRT> Il est facile de trouver si vous vous déboguez de votre programme. em>
Je suggérerais de jeter un coup d'œil à ce code, essayez de ne pas utiliser de noms de valeur tels que N, cela pourrait vraiment améliorer la lisibilité et vous aider à voir le problème.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int inputCount=0; System.out.println("enter length of string"); try{ inputCount=sc.nextInt(); }catch(Exception e){ System.out.println("int please"); System.exit(1); } String a[]=new String[inputCount]; System.out.println("enter string values"); for(int i=0;i<a.length;i++){ a[i]=sc.next(); } for(int j=0;j<a.length;j++){ System.out.println(a[j]); } } }
Pour obtenir votre processus souhaité, veuillez simplement modifier Voici comment je vois le problème; P> donc lorsque vous exécutez nb: le flux de sortie est différent de la Flux d'entrée, de sorte que cela n'a pas d'importance que, donc car il n'y a pas de phrase après Le curseur Donc, puisque le curseur est maintenant sur une nouvelle ligne, il offre la possibilité de saisir une nouvelle phrase et de le stocker sur alors le contenu de je me suis amusé à donner mon avis sur ceci, merci Vous. P> p> A [i] = sc.nextline (); code> sur
A [i] = sc.next (); code>. À moins que votre entrée de chaîne ait des espaces d'entre eux, cela devrait fonctionner correctement, sinon Place
sc.nextline (); code> avant votre boucle
NEXTINT (); code> attend et stocke le premier mot d'entrée en tant que
int code>, sinon une erreur est lancée, cependant, il ne sort pas de la ligne actuelle. < / p>
n = sc.nexint (); code> et a donné l'entrée p>
3 code> a été enregistré sur
n code> mais le curseur du système reste toujours derrière comme ça,
3 | code>, p>
system.out.println ("entrer les valeurs de chaîne"); code> est exécuté, le curseur du flux d'entrée reste toujours derrière 3; p> < Pré> xxx pré>
a [i] = sc.nextline () code> attend et stocke la phrase après le curseur, sinon il se casse à la ligne suivante. Mais si le curseur est déjà sur une nouvelle ligne, cela donne la possibilité de saisir une nouvelle phrase (puis de le stocker si vous le souhaitez) et se déplace vers une nouvelle ligne. P>
3 | code>, il se casse à la ligne suivante et attribue la commande de la ligne de pause (nouvelle ligne)
"\ n" code> à
a [0] code> dans la boucle pour la boucle lorsque
i = 0 code>, p>
a [1] code> lorsque entrée est taraudée pour
i = 1 code> et se déplace vers la ligne suivante, le même processus est exécuté pour quand
i = 2 code> p>
chaîne [] A code> est affiché comme suit; p>
@ Tzvi2 J'ai déjà essayé ça. C'était montrant une éventuelle exception
@ Tzvi2 la boucle pour la boucle est correcte;
pour (int i = 0; i boucles trois fois, de 0 à 2, ce qui est correct.
Ma suspicion est que vous avez besoin d'une ligne SC.NextLine () avant que la boucle pour consommer la nouvelle ligne de votre utilisation précédente du scanner pour lire l'entier.