Java et System.in.read
Résolu
keurdange
Messages postés
720
Date d'inscription
Statut
Membre
Dernière intervention
-
keurdange Messages postés 720 Date d'inscription Statut Membre Dernière intervention - 6 nov. 2011 à 00:01
keurdange Messages postés 720 Date d'inscription Statut Membre Dernière intervention - 6 nov. 2011 à 00:01
A voir également:
- Java et System.in.read
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Si tu sais utiliser Scanner il n'y a aucun intérêt à utiliser read() sur System.in.
Avec ton code tu t'obliges à avoir un seul caractère à chaque fois, c'est à dire que par exemple n sera uniquement compris entre 0 et 9, c'est très réducteur !
Le mieux serait de faire une boucle pour lire toute la ligne, c'est à dire while((m=System.in.read())!=-1).
De plus tu oublies de prendre en compte le '\n' qui est ajouté à System.in lorsque tu appuies sur la touche entrée... il ne faut pas oublier de le supprimer...La confiance n'exclut pas le contrôle
Avec ton code tu t'obliges à avoir un seul caractère à chaque fois, c'est à dire que par exemple n sera uniquement compris entre 0 et 9, c'est très réducteur !
Le mieux serait de faire une boucle pour lire toute la ligne, c'est à dire while((m=System.in.read())!=-1).
De plus tu oublies de prendre en compte le '\n' qui est ajouté à System.in lorsque tu appuies sur la touche entrée... il ne faut pas oublier de le supprimer...La confiance n'exclut pas le contrôle
Si n est un nombre négatif ça veut dire que tu entres m avec un signe '-' or puisque tu ne lis qu'un seul caractère à la fois ça veut dire que tu n'as lu que le caractère '-' et pas la suite. dans ce cas digit renvoie n=-1 que tu inverses en faisant n=-n; c'est pour ça que tu as toujours 1.
Mais la boucle for n'est pas sauté, c'est juste que n vaut 1, et qu'il reste en mémoire le reste de ce que tu as entré (par exemple -5, il reste le 5) donc ton v prend directement la valeur '5' et tu as tab[0]=5, la boucle s'arrete avant même de t'avoir demandé quoi que ce soit, et la deuxième boucle t'affichera 5.
En revanche si tu entres m sans signe '-', digit va bien fonctionner sauf qu'avec n=-n tu vas avoir n qui va être négatif au moment de rentrer dans la boucle, auquel cas ta condition i<n ne va jamais être vérifié et la boucle for sera fini avant même d'avoir commencé !
Dans cas la deuxième boucle ne devrait rien afficher non plus.
Mais la boucle for n'est pas sauté, c'est juste que n vaut 1, et qu'il reste en mémoire le reste de ce que tu as entré (par exemple -5, il reste le 5) donc ton v prend directement la valeur '5' et tu as tab[0]=5, la boucle s'arrete avant même de t'avoir demandé quoi que ce soit, et la deuxième boucle t'affichera 5.
En revanche si tu entres m sans signe '-', digit va bien fonctionner sauf qu'avec n=-n tu vas avoir n qui va être négatif au moment de rentrer dans la boucle, auquel cas ta condition i<n ne va jamais être vérifié et la boucle for sera fini avant même d'avoir commencé !
Dans cas la deuxième boucle ne devrait rien afficher non plus.
Comme je l'ai expliqué plus haut, tu dois prendre toute la ligne, c'est à dire faire une boucle while((m=System.in.read())!=-1) et construire ta ligne au fur et à mesure en ajoutant les caractères un à un (avec un StringBuilder par exemple)
Evidemment, en plus de lire le cas m==-1 il faut aussi traiter le cas fin de ligne, et c'est un peu plus compliqué, car selon le système d'exploitation on va lire \n (m=10), \r (m=13), ou les deux à la suite.
En fait il y aurait plus simple, ce serait d'utiliser read(byte[]), mais je ne sais pas si tu peux, au vu de tes contraintes scolaires ^^
Evidemment, en plus de lire le cas m==-1 il faut aussi traiter le cas fin de ligne, et c'est un peu plus compliqué, car selon le système d'exploitation on va lire \n (m=10), \r (m=13), ou les deux à la suite.
En fait il y aurait plus simple, ce serait d'utiliser read(byte[]), mais je ne sais pas si tu peux, au vu de tes contraintes scolaires ^^