6
votes

Java - Comment lire des entiers séparés par un espace dans un tableau

J'ai des problèmes avec mon projet car je ne peux pas obtenir le début correct, qui est de lire une ligne d'entiers séparés par un espace de l'utilisateur et placez les valeurs dans un tableau.

    System.out.println("Enter the elements separated by spaces: ");
    String input = sc.next();
    StringTokenizer strToken = new StringTokenizer(input);
    int count = strToken.countTokens();
    //Reads in the numbers to the array
    System.out.println("Count: " + count);
    int[] arr = new int[count];

    for(int x = 0;x < count;x++){
        arr[x] = Integer.parseInt((String)strToken.nextElement());
    }


8 commentaires

Lisez la [documentation] ( Docs. oracle.com/javase/7/docs/api/java/util/ scanner.html # Suivant () du suivant () méthode.


Tout le monde donne les solutions alternatives évidentes, mais il serait plus intéressant de trouver également le bogue dans le code de l'OP (je n'ai pas).


@Dystroy: le bug est, il utilise sc.next (); au lieu de sc.nextline ();


@jlordo bien vu. Cela devrait être la réponse (seulement).


Quelle est la variable sc référençant?


@NICKHOLT: Je suis sûr que cela fait référence à un java.util.scanner


@Jlordo: ic, a vu vos commentaires après avoir posté la mine - on dirait que, comme vous le dites, le problème est avec l'appel à suivant () qui devrait être nextline () Ou peut-être suivant () et vous pouvez utiliser le java.util.scanner pour itérer sur les jetons.


BTW, l'ensemble du code pourrait être fait sans le tokéniseur car le scanner effectue déjà la tâche.


5 Réponses :


4
votes
String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\\s"))  
{  
   list.add(Integer.parseInt(s));  
}
list.toArray();

4 commentaires

@Dystroy j'ai proposé des égaux et du code le plus faciles. J'ai répondu sur serait-il préférable de faire cela différent?


Oui, mais votre code initial était totalement imparfait (maintenant fixé). Je ne comprends pas qui pourrait la faire avancer, à part les gens qui viennent juste pour vérifier qu'il y avait "Split" quelque part dans la réponse ...


Et en fait, il ne résout pas le vrai problème, vu par Jlordo.


OK, donc je l'ai fait, mais le problème est pour une raison quelconque, le scanner n'attend pas l'entrée de l'utilisateur avec la commande SC.NextLineLine () qu'il ignore simplement la prochaine entrée de l'utilisateur.



2
votes

Il existe des moyens alternatifs d'obtenir la même chose. Mais quand j'ai essayé votre code, il semble fonctionner correctement.

StringTokenizer strToken = new StringTokenizer("a b c");
int count = strToken.countTokens();
System.out.println(count);


0 commentaires

2
votes

Ce serait un moyen plus facile de faire la même chose - xxx


2 commentaires

String Input = SC.Next (); ne lira que le prochain jeton, le code aura donc le même problème comme op.


@Jlordo - Merci beaucoup pour votre commentaire. J'ai mis à jour mon code. Vérifiez s'il vous plaît.



14
votes

Il n'y a qu'un petit changement nécessaire pour faire fonctionner votre code. L'erreur em> est dans cette ligne: xxx pré>

comme indiqué dans mon commentaire sous la question, il ne lit que le prochain jeton de l'entrée. Voir le documentation .

Si vous le remplacez par P>

String input = sc.nextLine();


3 commentaires

+1 pour la bonne explication. Le reste du code de OP pourrait être meilleur mais essentiellement bien.


OK, cela sonne vraiment noobish, mais la raison pour laquelle je l'avais définie comme suit, c'est parce que pour une raison quelconque lorsque je saisi SC.Nextline (), il passe simplement à la saisie de l'utilisateur et continue avec le programme. C'est vraiment bizarre ...


@Samfrench: copié votre code, couru avec nextline (); et a fonctionné bien. Réessayez, si le problème persiste, vous pouvez avoir / eu une erreur ailleurs.



0
votes
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
.
.
.
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N= Integer.parseInt(st.nextToken());

0 commentaires