J'ai la boucle suivante:
for (byte i = 0 ; i < 128; i++) {
System.out.println(i + 1 + " " + name);
}
Lorsque j'exécute mon programme, il imprime tous les nombres de -128 à 127 dans une boucle infinie. Pourquoi cela arrive-t-il?
J'ai la boucle suivante:
for (byte i = 0 ; i < 128; i++) {
System.out.println(i + 1 + " " + name);
}
Lorsque j'exécute mon programme, il imprime tous les nombres de -128 à 127 dans une boucle infinie. Pourquoi cela arrive-t-il?
Après 127, quand il incrémente, il deviendra -128, de sorte que votre condition ne correspond pas .
octet: L'
byte
type de données est un signé 8 bits en complément à deux entier. Il a une valeur minimale de-128
et une valeur maximale de127
(inclus). L'byte
type de données peuvent être utiles pour économiser de la mémoire dans les grands ensembles, où les économies de mémoire qui importe réellement. Ils peuvent également être utilisés à la place deint
où leurs limites vous aider à préciser votre code; le fait qu'une variable a une portée limitée, peut servir comme une forme de documentation.
Il fonctionne comme ceci:
0, 1, 2, ..., 126, 127, -128, -127, ...
8 bits peut représenter un signé nombre jusqu'à 127.
Voir ici pour les types de données primitifs.
L'image en dit plus que les mots
Parce que les octets sont signés en Java, ils seront donc toujours inférieurs à 128.
Pourquoi Java a choisi les octets signés est un mystère du fond du temps. Je n'ai jamais pu comprendre pourquoi ils ont corrompu un type de données non signé parfaitement bon :-)
Essayez plutôt ceci:
for (byte i = 0 ; i >= 0; ++i ) {
ou mieux encore:
for (int i = 0 ; i < 128; ++i ) {
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.