Obtenez tableau d'entiers de saisie de l'utilisateur en java
J'ai besoin d'obtenir une série de nombres entiers de l'utilisateur.
L'utilisateur ne sera pas invité à entrer les chiffres. L'entrée sera de la forme suivante:
6
34 12 7 4 22 15
3
3 6 2
La première ligne indique le nombre d'entiers dans la deuxième ligne.
J'ai d'abord essayé de lire la deuxième ligne comme une Chaîne de caractères et l'a cassé en entiers dans le code à l'aide de StringTokenizer. Sinus ce qui se passe dans mon programme, et c'est une perte de temps et
J'avais besoin de les lire directement.
Je me souviens qu'en C++, c'était relativement simple. Le segment de code suivant utilisés pour faire le tour.
for(i=0;i<6;i++)
cin>>a[i];
Pour atteindre cet objectif, j'ai utilisé le java.util.Scanner et mon code se présente comme ci-dessous:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Scanner src = new Scanner(System.in);
for(x=0;x<2;x++){
arraySize = Integer.parseInt(br.readLine());
for(i=0;i<arraySize;i++)
array[i] = src.nextInt();
}
Dans ce cas, j'obtiens l'erreur suivante:
Exception in thread "main" java.lang.NumberFormatException: For input string: "34 12 7 4 22 15"
Je suis ouvert aux suggestions et ne suis pas coller à Scanner seul. Si il y a une autre méthode pour réaliser cela, je suis partie.
StringTokenizer est QUE beaucoup de temps ? Avez-vous le profil ?
Est-ce devoirs? Si oui, veuillez ajouter la
homework
tag...J'ai suggéré StringTokenizer dans ma réponse après l'écrémage et le manque de votre mention de l'essayer déjà. Moi aussi, je suis curieux de savoir pourquoi vous dites StringTokenizer a pris un long moment. Fait-il prendre du temps pour s'exécuter, ou n'avait-il beaucoup de temps pour programmer? Les premiers peuvent trahir des problèmes sur votre système. Ce dernier livrera des problèmes dans la conception de votre mise en œuvre.
OriginalL'auteur Fawkes | 2011-12-29
Vous devez vous connecter pour publier un commentaire.
Référence pour l'avenir, voici une façon de le faire avec le
Scanner
classe:Pourquoi avez-vous besoin d'un deuxième scanner?
Pour plus de clarté et de validation de base. Je voulais assurez-vous que les numéros de l'utilisateur attendaient étaient tous sur la deuxième ligne et de ne pas répandre sur les différentes lignes.
OriginalL'auteur black panda
Vous l'avez dit vous pouvez utiliser le code suivant en C++:
Si c'est ce que vous avez utilisé en C++, pourquoi ne pas l'utiliser?
En supposant que le scanner déclaration:
De ce que j'ai vu, les gens essaient d'écrire l'ensemble du programme pour vous. Mais comme vous l'avez indiqué, vous pouvez résoudre ce problème en utilisant le code C++, j'ai juste converti le code Java pour vous.
Si vous voulez le code complet, c'est ici:
Je me rends compte que cette réponse est ans de retard, mais j'étais à la recherche d'une autre question, quand j'ai couru à travers ce. Les réponses données ici ont été très déroutant pour moi jusqu'à ce que j'ai réalisé que ce n'était pas ce que je cherchais. En voyant cette affiche toujours sur google, j'ai décidé de poster cette.
OriginalL'auteur Spencer
OriginalL'auteur Tim Kachko
Vous pouvez tester avec StringTokenizer, mais si vous savez ce que le séparateur est utilisé à l'avance, il suffit d'utiliser Chaîne de caractères.split()
OriginalL'auteur Mike Yockey
Si votre entrée est "6 34 12 7 4 22 15 3 3 6 2" séparés par espaces alors il sera lu en une seule fois par
br.readLine()
. Vous ne pouvez pas passer "6 34 12 7 4 22 15 3 3 6 2" pourparseInt
, comme vous l'avez vu.Pour ce cas, je vous conseillerais d'appeler
String.split()
sur la Chaîne de caractères retournée parbr.readLine()
, et vous serez à gauche avec un tableau de Chaînes de caractères qui peuvent être transmis à son tour àInteger.parseInt()
.Bien dans ce cas je ne serais pas le count lignes et utilisez le .split() approche sur les lignes avec des données réelles. Ou utiliser StringTokenizer. Il y a peu de chances d'être un problème de performance ici - si il y a ensuite, vous pouvez restructurer votre entrée peut-être? Après le profilage de cours.
Viens de relire la question - il s'agit de données que l'utilisateur tape dans? Alors pourquoi leur donner la chance de donner des informations contradictoires, comme: "3" "1 2"
OriginalL'auteur Matthew Gilliard
devrait vous aider à éviter le problème indiqué par Vanathi dans sa réponse. Comme pour la connaissance de la taille de votre tableau, quelque chose comme :
devrait le faire.
OriginalL'auteur Raveline