0
votes

Impossible de prendre toutes les entrées dans une matrice à cordes en Java

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?

code strong> p> xxx pré>

PRE> P PRE>

enter length of string
3
enter string values
one
two

one
two


3 commentaires

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


4 Réponses :


2
votes

Vous devez ajouter sc.nextline () code> avant de commencer la lecture de la chaîne d'entrée de la console.

one
two
three


0 commentaires

1
votes

Lorsque vous lisez un int et que vous souhaitez lire une chaîne complète , vous devez déplacer un pointeur à l'intérieur scanner à la suivante ligne. PS Il est facile de trouver si vous vous déboguez de votre programme. xxx

sortie: xxx


0 commentaires

1
votes

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]); 
    }
  }
}


0 commentaires

1
votes

Pour obtenir votre processus souhaité, veuillez simplement modifier A [i] = sc.nextline (); sur A [i] = sc.next (); . À moins que votre entrée de chaîne ait des espaces d'entre eux, cela devrait fonctionner correctement, sinon Place sc.nextline (); avant votre boucle

Voici comment je vois le problème;

NEXTINT (); attend et stocke le premier mot d'entrée en tant que int , sinon une erreur est lancée, cependant, il ne sort pas de la ligne actuelle. < / p>

donc lorsque vous exécutez n = sc.nexint (); et a donné l'entrée xxx

3 a été enregistré sur n mais le curseur du système reste toujours derrière comme ça, 3 | ,

nb: le flux de sortie est différent de la Flux d'entrée, de sorte que cela n'a pas d'importance que, system.out.println ("entrer les valeurs de chaîne"); est exécuté, le curseur du flux d'entrée reste toujours derrière 3; < Pré> xxx

a [i] = sc.nextline () 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.

donc car il n'y a pas de phrase après Le curseur 3 | , il se casse à la ligne suivante et attribue la commande de la ligne de pause (nouvelle ligne) "\ n" à a [0] dans la boucle pour la boucle lorsque i = 0 ,

Donc, puisque le curseur est maintenant sur une nouvelle ligne, il offre la possibilité de saisir une nouvelle phrase et de le stocker sur a [1] lorsque entrée est taraudée pour i = 1 et se déplace vers la ligne suivante, le même processus est exécuté pour quand i = 2

alors le contenu de chaîne [] A est affiché comme suit; xxx

je me suis amusé à donner mon avis sur ceci, merci Vous.


0 commentaires