7
votes

valeur entière lue de System.in n'est pas la valeur dactylographiée

Je suis un débutant à Java, et comme un exercice voulait wap un programme simple pour imprimer non. de caractères '*' selon l'utilisateur. Mais d'une manière ou d'une autre, la sortie de ce code reste toujours similaire: xxx

si je remplace "*" avec i, je peux voir qu'il bouge jusqu'à 50/52/54, même si je cours le boucle no_stars fois.

Qu'est-ce qui semble être le problème ici?


2 commentaires

Quelle est votre sortie attendue et actuellement à quoi ressemblent la sortie?


faire un système.out.println (n); avant la boucle


5 Réponses :


12
votes

Vous devez analyser le numéro reçu à partir de System.in.read () ou également le lire comme un entier, vous venez de le jeter, donc si vous entrez 5, il passe 0x35 fois ( Quelle est la valeur du caractère '5')

vous pouvez faire, par exemple: xxx


3 commentaires

C'est une bonne réponse ... je suis nouveau à ça .. :)


Merci, cela a travaillé. Mais je ne comprends toujours pas que pourquoi était-ce que j'avais 50 52 ou 54 étoiles? Même si le système.infread () ne lit que le premier caractère, je suis entré dans des véhiculest comme 7, 10, 86, 3, etc. et obtenu la même sortie sur {50,53,54}. Pourriez-vous expliquer cela?


'7' a la valeur de 0x37 qui est 55. qui est suffisamment proche (compte tenu de vous donner des exemples et non des valeurs réelles).



5
votes

Parce que vous lisez le code ASCII du caractère à partir de l'entrée ici:

no_stars = Integer.parseInt(Console.readLine());


0 commentaires

1
votes
printstars(System.in.read() - '0');

1 commentaires

Merci, mais je serais toujours coincé avec l'octet d'entrée. Je pense que j'utiliserai la classe du scanner surtout.



1
votes

Il y a deux erreurs dans votre code.


premier fort> p> xxx pré>

lit un octet, pas un entier, pas un entier. , c'est l'analyse de l'entier et obtient le premier octet de celui-ci. p>


second fort> p> xxx pré>

imprimera toujours une étoile de plus que demandé. Donc, il devrait être remplacé par p> xxx pré>


suggestion: vous pouvez utiliser Scanner pour lire votre entier, par exemple P>

Scanner scanner = new Scanner(System.in);
no_stars = scanner.nextInt();


0 commentaires

0
votes

Voici le programme corrigé pour vous: (Le principal problème était de cette ligne // no_stars = (int) system.in.read ();) xxx


0 commentaires