OVH Cloud OVH Cloud

Le Java, c'est le retour a l'age de pierre ou quoi !!!??

27 réponses
Avatar
Yo!

Je pique ma crise parce que je veux faire quelque chose de super-mega-ultra
complique: je veux afficher la valeur binaire d'uin entier.

Alors, on a bien la petite metode toBinaryString sauf qu'elle n'est pas
foutue d'afficher tous les bits, meme ceux qui sont a zero avant.

Alors, quand on affiche ca dans le log, vue que la sortie est alignee a
gauche, c'est vraiment la mouise pour verifier la coherence.

Pitie, un petit truc simple siousplait, je voudrais afficher mes 16 bits
quelque soit la valeur de l'entier.

Et puis comme c'est just pour du log, si possible, pas trop de ligne de
codes.

Je suis (oblige) en JDK 1.3.1


Euh, evidemment, j'ai essaye de trouver la dans la JavaDoc mais inutile de
dire qu'elle est loin, mais alors, tres loin, d'avoir les capacite de
recherche du MSDN... et on critique Microsof, franchement....

10 réponses

1 2 3
Avatar
Kupee
Vincent wrote:
switch (i)
{
case 0:
System.out.println("00000000000000000000000000000000");
case 1:
System.out.println("00000000000000000000000000000001");
case 2:
System.out.println("00000000000000000000000000000010");
...
default:
System.out.println("merde j'en ai oublié un");
}


Ah oui mais il faut aussi le testcase junit avec

public void testIntToBin() {
assertEquals("00000000000000000000000000000000",intToBin(0);
assertEquals("00000000000000000000000000000001",intToBin(1);
assertEquals("00000000000000000000000000000010",intToBin(2);
....
}

au cas ou t'aurais fais une erreur dans ta méthode :p

Avatar
Techno06
Salut,
si tu vois un peu toutes les solutions proposées tu verras qu'il n'y en a
aucune qui marche (sauf le switch geant evidemment, a l'heure ou je poste
cette reponse)... Donc, j'ai conserve ma petite metode pour faire mon
affichage. J'esperais un truc du style %016d comme en C (qui n'a rien a voir
avec le monde MS). Ca c'etait pour la reponse a ma question.

Pour le reste, on ne va pas faire un troll sur Java ou .NET car, de toute
facon, ca ne changera rien et tout le monde s'en fout.

Juste une petite remarque: je ne fais pas partie des développeurs qui
apprécient les côté gratuit de des logiciels et tout le tatatoin qui va
autour.
Ca va bien pour les étudiants (et tant mieux que ca existe pour eux), mais
on ne construit pas une économie sur du gratuit. Et qui plus est, si un jour
tu bosses en info dans une boite, tu apprendras que:
1 - ton code ne sera pas gratuit
2 - tu ne choisieras pas forcement ton envionnement de travail (sauf si tu
deviens directeur technique tres rapidement, et encore)
3 - tu as 95% de chances d'avoir un PC sous Windows sur ton bureau
4 - si tu refuses Windows et le monde MS, tu te feras bouffer par ceux qui
le maitrise et tu deviendras l'espece de burne de la boite que personne ne
veut avoir dans sont equipe.

En fait, on se fout pas mal de savoir si Java est mieux que .NET ou non,
l'important, c'est de savoir qui domine le marché et quelles sont tes
chances de survies (d'informaticien) avec.
Avatar
jz
Techno06 wrote:
Salut,
si tu vois un peu toutes les solutions proposées tu verras qu'il n'y en a
aucune qui marche (sauf le switch geant evidemment, a l'heure ou je poste
cette reponse)... Donc, j'ai conserve ma petite metode pour faire mon


Je dirais plutôt qu'il faut avoir un peu de jugeotte pour les comprendre
et les utiliser. C'est comme ça ici, on trouve des pistes, jamais des
solutions clef en main toutes emballées. Si tu cherches un sous-traitant
à l'oeil pour résoudre les problèmes qui te dépassent c'est raté.


affichage. J'esperais un truc du style %016d comme en C (qui n'a rien a voir
avec le monde MS). Ca c'etait pour la reponse a ma question.


Si tu arrives à afficher du binaire avec %016d en C tu es vraiment fort,
ou alors tu t'es fait arnaquer en beauté avec ton compilateur :)



Pour le reste, on ne va pas faire un troll sur Java ou .NET car, de toute
facon, ca ne changera rien et tout le monde s'en fout.


Je trouve que pour un qui n'aime pas les trolls tu t'y prends pas mal.



Juste une petite remarque: je ne fais pas partie des développeurs qui
apprécient les côté gratuit de des logiciels et tout le tatatoin qui va
autour.


Développeur, c'est peut-être un peu exagéré, vu le niveau de tes
questions :)


Ca va bien pour les étudiants (et tant mieux que ca existe pour eux), mais
on ne construit pas une économie sur du gratuit. Et qui plus est, si un jour
tu bosses en info dans une boite, tu apprendras que:
1 - ton code ne sera pas gratuit


a) Qu'en sais-tu ?
b) Et alors ?


2 - tu ne choisieras pas forcement ton envionnement de travail (sauf si tu
deviens directeur technique tres rapidement, et encore)


Allons, ne sois pas pessimiste. On en a déjà vu des bien plus obtus que
toi devenir directeur technique.



3 - tu as 95% de chances d'avoir un PC sous Windows sur ton bureau


Tu confonds le marché des particuliers avec le marché des entreprises,
mais c'est pas grave, tu n'en n'es pas à une approximation près.



4 - si tu refuses Windows et le monde MS, tu te feras bouffer par ceux qui
le maitrise et tu deviendras l'espece de burne de la boite que personne ne
veut avoir dans sont equipe.


Disons plutôt que tu seras le seul à faire tourner correctement un
serveur plus d'une semaine sans plantage, alors on t'aduleras à ta juste
valeur :) Essaie un peu, c'est vachement bon pour l'égo.




En fait, on se fout pas mal de savoir si Java est mieux que .NET ou non,
l'important, c'est de savoir qui domine le marché et quelles sont tes
chances de survies (d'informaticien) avec.



Bonne chance à toi, grand génie incompris.


Jacques

PS. Ho pardon, j'ai trollé. Oui je sais c'est pas bien, mais j'ai pas pu
resister devant une si belle perche :) C'est promis, j'arrête demain...

Avatar
Techno06
Je dirais plutôt qu'il faut avoir un peu de jugeotte pour les comprendre
et les utiliser. C'est comme ça ici, on trouve des pistes, jamais des
solutions clef en main toutes emballées. Si tu cherches un sous-traitant
à l'oeil pour résoudre les problèmes qui te dépassent c'est raté.


T'as raison.

Si tu arrives à afficher du binaire avec %016d en C tu es vraiment fort,
ou alors tu t'es fait arnaquer en beauté avec ton compilateur :)


Tant pis pour moi.

Je trouve que pour un qui n'aime pas les trolls tu t'y prends pas mal.


Mais oui, mais oui, t'es bien brave.

Développeur, c'est peut-être un peu exagéré, vu le niveau de tes
questions :)


C'est vrai qu'en plus, seul Jacques dit Jz peut jugé. T'as du pot d'avoir un
CDI chez Dieux.

a) Qu'en sais-tu ?
b) Et alors ?


Là, tu me decois, tu n'a pas sortis l'argument de choc. Du coup, tu me
coupes l'herbe sous les pieds

Allons, ne sois pas pessimiste. On en a déjà vu des bien plus obtus que
toi devenir directeur technique.


???

Tu confonds le marché des particuliers avec le marché des entreprises,
mais c'est pas grave, tu n'en n'es pas à une approximation près.


C'est vrai, mais heureusement que tu es la pour rectifier, des fois que
j'induise en erreur quelques lecteurs...

Disons plutôt que tu seras le seul à faire tourner correctement un
serveur plus d'une semaine sans plantage, alors on t'aduleras à ta juste
valeur :) Essaie un peu, c'est vachement bon pour l'égo.


J'en bande d'avance.

Avatar
Techno06
Ah, j'oubliais, j'ai posé une autre question sur les dates (comme je suis
débutant en Java).

N'hesite pas a montrer tout ce que tu sais faire...

@+
T.
Avatar
Vincent Brabant
Salut,
si tu vois un peu toutes les solutions proposées tu verras qu'il n'y en a
aucune qui marche
Et la solution que j'ai proposée, où c'est qu'elle marche pas ??



--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be

Avatar
vclassine
"Techno06" wrote in message news:<bvoufa$7d8$...
Salut,
si tu vois un peu toutes les solutions proposées tu verras qu'il n'y en a
aucune qui marche (sauf le switch geant evidemment, a l'heure ou je poste
cette reponse)...
Je confirme j'ai essayé la réponse de Laurent et ça pète à la

compilation dès la première ligne, pour preuve le message du compilo:

tst.java [1:1] 'class' or 'interface' expected
Salut,
^

Autant dire qu'avec de tel conseillers c'est pas gagné...

Donc, j'ai conserve ma petite metode pour faire mon
affichage. J'esperais un truc du style %016d comme en C (qui n'a rien a voir
avec le monde MS). Ca c'etait pour la reponse a ma question.


Aller, solution pour les feignasses qui veulent changer de language
sans apprendre quoi que ça soit:

tapes dans google "printf for java"

Pour le reste, on ne va pas faire un troll sur Java ou .NET car, de toute
facon, ca ne changera rien et tout le monde s'en fout.
Faut voir, avec toi ça peut être drôle...


Juste une petite remarque: je ne fais pas partie des développeurs qui
apprécient les côté gratuit de des logiciels et tout le tatatoin qui va
autour.
Y dis qu'il ne voit pas le rapport: java n'est pas forcément gratuit,

et tu peux faire du printf pour pas un rouble...

Ca va bien pour les étudiants (et tant mieux que ca existe pour eux), mais
on ne construit pas une économie sur du gratuit.
Et tu crois qu'il font ça gratos? Pour la gloire? Autant te le dire

tout de suite, si c'est le cas de certains dévellopeurs indépendant,
ça n'est pas celui d'IBM, SUN & cie...

Et qui plus est, si un jour
tu bosses en info dans une boite, tu apprendras que:
1 - ton code ne sera pas gratuit
Tu payent quand tu vois une pub à la télé ou que tu en reçoit une dans

ta boite au lettre? Et pourtant il y a des mecs qui sont payé pour les
fabriquer...

2 - tu ne choisieras pas forcement ton envionnement de travail (sauf si tu
deviens directeur technique tres rapidement, et encore)
3 - tu as 95% de chances d'avoir un PC sous Windows sur ton bureau
D'abord tu peux choisir ta boite, ensuite entre utiliser un PC sous

windows et programmer sous .net il y a un fossé... Ceci étant dit
personne n'as dit qu'il fallait banir MS, ils ont leurs qualité et
leurs défaut. Mais si tu ne vois pas les qualité de java et que tu
prétend que .net est bien meilleurs il est légitime qu'on te mette le
nez dans ta m...

4 - si tu refuses Windows et le monde MS, tu te feras bouffer par ceux qui
le maitrise et tu deviendras l'espece de burne de la boite que personne ne
veut avoir dans sont equipe.
Mort de rire. Tu crois que ceux qui ne sont pas d'accord avec la

politique de MS ne savent pas utiliser Windows? Ils ont tous
l'appareil photo numérique de la cousine à faire marcher avec le PC
familial sous W98...

Franchement ont t'as déjà demandé en entretien si tu savais utiliser
Windows? Si tu répond oui, inquiètes-toi.

Maintenant a contrario je peux de dire que la maitrise linux/unix est
une qualité recherché par les entreprises, quand à java ça marche fort
aussi (côté serveur surtout).

En fait, on se fout pas mal de savoir si Java est mieux que .NET ou non,
l'important, c'est de savoir qui domine le marché
Pas du tout, l'important c'est de savoir ce qui est le recherché

actuellement et ce qui le sera à terme, parce qu'autant te le dire
tout de suite une expertise ça ne se fait pas en un an ou deux...

et quelles sont tes
chances de survies (d'informaticien) avec.
Ceci étant dit les bons n'ont pas trop de problème à s'adapter au

nouvelles éxigences du marché...

Avatar
Salut Vincent,

Voici la solution que tu proposais:
String s = Integer.toBinaryString(65536);
System.out.println(("00000000000000000000000000000000"+s).substring(s.length
()));

Mais en fait, il faut calculer le nombre de zero a afficher en fonction de
la longueur de s. Dans ta solution, c'est fixe donc l'effet visuel est le
meme que sans les zero.

Quelque chose du style

String sZero="0000000000000000"; //je m'arrete a 16 car
c'est suffisant pour mon cas
String sBinary=Integer.toBinaryString(1234); //valeur binaire X

String sResult=sZero.subbtring(0,16-sBinary.length)+sBinary; //ici, on
tronque le nombre de zero en fontion du nombre de bits a afficher donc on
obtient toujours un chaine de 16 caracteres

System.out.println(sResult);

Bon, comme mon entier, en realite ne depasse jamais 14 bits couverts,
l'index de depart est forcement 0 mais si l'entier couvrait les 16 bits, il
y aurait un test en plus a faire:

String
sResult=sBinary.length=?"":sZero.subbtring(0,16-sBinary.length)+sBinary;

Mais en tout cas, merci quand meme pour ton aide.
@+
T.
Avatar
Vincent Brabant
Salut Vincent,

Voici la solution que tu proposais:
String s = Integer.toBinaryString(65536);
System.out.println(("00000000000000000000000000000000"+s).substring(s.length
()));

Mais en fait, il faut calculer le nombre de zero a afficher en fonction de
la longueur de s. Dans ta solution, c'est fixe donc l'effet visuel est le
meme que sans les zero.

Quelque chose du style

String sZero="0000000000000000"; //je m'arrete a 16 car
c'est suffisant pour mon cas
String sBinary=Integer.toBinaryString(1234); //valeur binaire X

String sResult=sZero.subbtring(0,16-sBinary.length)+sBinary; //ici, on
tronque le nombre de zero en fontion du nombre de bits a afficher donc on
obtient toujours un chaine de 16 caracteres

System.out.println(sResult);

Bon, comme mon entier, en realite ne depasse jamais 14 bits couverts,
l'index de depart est forcement 0 mais si l'entier couvrait les 16 bits, il
y aurait un test en plus a faire:

String
sResult=sBinary.length=?"":sZero.subbtring(0,16-sBinary.length)+sBinary;

Mais en tout cas, merci quand meme pour ton aide.
@+
T.



As tu exécuté le code ?

Je crains que non.
Sinon, tu aurais remarqué que ce code ne donne toujours que 32 chiffres binaires. Pas un de plus, pas un de moins. Quelque soit le nombre donnée en paramètre. Même si le nombre est négatif.

00000000000000000000000000000001 | 1
00000000000000000000000001100100 | 100
00000000000000000000000011111111 | 255
00000000000000000000000100000000 | 256
00000000000000000100000000000000 | 16384
00000000000000001111111111111111 | 65535
00000000000000010000000000000000 | 65536
11111111111111111111111111111111 | -1
11111111111111111111111110011100 | -100
11111111111111111111111100000001 | -255
11111111111111111111111100000000 | -256
11111111111111111100000000000000 | -16384
11111111111111110000000000000001 | -65535
11111111111111110000000000000000 | -65536


Il faut toujours tester le code avant de dire que cela ne fonctionne pas.
Et dans ma solution le nombre de zéros à afficher dépend bien de la longueur du nombre représenté en binaire.

A quoi sert le *substring(s.length())* à ton avis ?

System.out.println(("00000000000000000000000000000000"+s).substring(s.length()));

Mais comme t'a pas l'air de comprendre, je vais refaire de même en utilisant tes variables.

/** La méthode main qui fait les tests
aussi bien pour les nombres positifs que negatifs
**/
public static void main(String[] args) {
conversionBinaire(1);
conversionBinaire(100);
conversionBinaire(255);
conversionBinaire(256);
conversionBinaire(16384);
conversionBinaire(65535);
conversionBinaire(65536);
conversionBinaire(-1);
conversionBinaire(-100);
conversionBinaire(-255);
conversionBinaire(-256);
conversionBinaire(-16384);
conversionBinaire(-65535);
conversionBinaire(-65536);
}
/** methode qui affiche l'entier reçu en paamètre sous forme de nombre binaires (32 bits)
**/

public static void conversionBinaire(int entier) {
String sZero="00000000000000000000000000000000";
String sBinary=Integer.toBinaryString(entier);
String sResult=(sZero+sBinary).substring(sBinary.length());
System.out.println(sResult +" | "+entier);
}

Maintenant, j'ai fait tourné le même programme mais en remplacant le contenu de conversionBinaire par ton code:
String sZero="0000000000000000";
String sBinary=Integer.toBinaryString(entier);
String sResult=sBinary.length()=?"":sZero.substring(0,16-sBinary.length())+sBinary;
System.out.println(sResult+" | "+entier);

Et voici le résultat que cela donne:
0000000000000001 | 1
0000000001100100 | 100
0000000011111111 | 255
0000000100000000 | 256
0100000000000000 | 16384
| 65535
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1444)
at fr.comp.lang.java.integer.TransformationBinaire.ConversionBinaire(TransformationBinaire.java:42)
at fr.comp.lang.java.integer.TransformationBinaire.main(TransformationBinaire.java:29)
Exception in thread "main"

Pas beau. Et pas très robuste comme code.

Enfin, désolé que tu préfère une solution qui plante dans certains cas (que tu n'avais pas précisé au départ) que la mienne.

--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be

Avatar
oui, j'avais mal lu.

Autant pour moi.
1 2 3