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()); }
5 Réponses :
String integers = "54 65 74"; List<Integer> list = new ArrayList<Integer>(); for (String s : integers.split("\\s")) { list.add(Integer.parseInt(s)); } list.toArray();
@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? Code>
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.
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);
Ce serait un moyen plus facile de faire la même chose -
String Input = SC.Next (); code> 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.
Il n'y a qu'un petit changement nécessaire pour faire fonctionner votre code. L'erreur em> est dans cette ligne: 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();
+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 (); code> et a fonctionné bien. Réessayez, si le problème persiste, vous pouvez avoir / eu une erreur ailleurs.
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());
Lisez la [documentation] ( Docs. oracle.com/javase/7/docs/api/java/util/ scanner.html # Suivant () du
suivant () code> 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 (); code> au lieu de
sc.nextline (); code>
@jlordo bien vu. Cela devrait être la réponse (seulement).
Quelle est la variable
sc code> référençant?
@NICKHOLT: Je suis sûr que cela fait référence à un
java.util.scanner code>
@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 () code> qui devrait être
nextline () code> Ou peut-être
suivant () code> et vous pouvez utiliser le
java.util.scanner code> 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.