Java et System.in.read
Résolu/Fermé
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
-
Modifié par keurdange le 5/11/2011 à 15:39
keurdange Messages postés 720 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 13 juillet 2016 - 6 nov. 2011 à 00:01
keurdange Messages postés 720 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 13 juillet 2016 - 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
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
2 réponses
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
5 nov. 2011 à 15:50
5 nov. 2011 à 15:50
ca renvoie toujours 1 lors de la conversion.
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 5/11/2011 à 15:52
Modifié par KX le 5/11/2011 à 15:52
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
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
5 nov. 2011 à 16:27
5 nov. 2011 à 16:27
Ok, merci. Mais, c'est un exo qui nous oblige à utiliser System.in.read() pour faire le programme. En plus, le programme saute la première boucle for.
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 5/11/2011 à 16:47
Modifié par KX le 5/11/2011 à 16:47
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.
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
5 nov. 2011 à 22:08
5 nov. 2011 à 22:08
Ok. Alors comment faire pour lire le '-' et la suite?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
5 nov. 2011 à 22:27
5 nov. 2011 à 22:27
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 ^^
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
6 nov. 2011 à 00:01
6 nov. 2011 à 00:01
Ok, cool alors. Je jeterais un coup d'oeil sur l'API pour voir le read(byte[]).