didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
3 juin 2006 à 16:22
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
5 juin 2006 à 15:51
Bonjour apres avoir realiser un prog qui converti des donnees decimale en donnees binnaire j'ai voulu faire un prog qui fait l'inverse.
Le seul petit probleme c'est:
(Il y a juste une partie du code)
/* Inversement de "ChaineBinaire" */
Integer d=null;
String ChaineInverse="";
for (d=(NbCaractere-1); d>=0; d--){
ChaineInverse=ChaineBinaire.charAt(d);
}
"ChaineInverse" et "ChaineBinaire" son de type String
"NbCaractere" et le nombre de caractere present dans la chaine "ChaineBinaire".
Car j'utilise que des "String" et la c'est un "char".
Comment je peux faire ???????
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 3 juin 2006 à 17:01
merci ca marche!!! mais...
une derniere petite chose:
comment je peut savoire si ma chaine contien d'autre caracteres que des 0 et des 1 .
mon code c'est
"A=O.compareTo(ChaineBinaire);
B=I.compareTo(ChaineBinaire);
if ((A==1)||(B==-1)){
for (int c=0; c<=60; c++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
}"
avec "I"=1111111111111111;
et "O"=0000000000000000
mais le seul probleme c'est que ca m'affiche le message d'erreur lorsque les caracteres sont correcte mais pas l'inverse. donc j'ai decider de changer deux valeurs mais c'est parreille.
"A=O.compareTo(ChaineBinaire);
B=I.compareTo(ChaineBinaire);
if ((A==-1)||(B==1)){
for (int c=0; c<=60; c++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
}"
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 3 juin 2006 à 17:18
Une autre remarque : quand tu fait ta chaine inverse
faut pas faire
ChaineInverse=""+ ChaineBinaire.charAt(d);
}
mais ChaineInverse += ChaineBinaire.charAt(d);
car car sinon tu va avoir que 1 caractere dans ChaineInverse
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 3 juin 2006 à 17:28
Excuses, c'est vrai j'ai pas mis de commentaires
bool correct = true; // booleen pour savoir si la chaine contient que des 0 ou des 1
bool exit = false; // condition de sortie de la boucle while
int pos = 0; // compteur de position sur la chaine de caractere
String str="0000111"; // chaine a analyser faudra que tu remplace str par ta chaine a //analyser
while(!exit) // tant que exit est faux
{
if(pos>= str.length()) // on est a la fin de la chaine on sort
{
exit = true; // exit a true-> sortie de la boucle a la prochaine etape
}
else
{
if(str.charAt(pos) != '0' || str.charAt(pos) != '1') // est que le caractere a la position pos est différent de 0 ou de 1
{
// c'est pas le bon caractere on sort et chaine pas correcte
correct = false; // la chaine est pas bonne
exit = true; // on sort
}
}
pos++; // on passe au caractere suivant
}
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 3 juin 2006 à 19:12
Je vois pas l'erreur,...
essaye comme ca : (au passage j'avais fait une petite erreur dans le test regarde les passage en rouge)
Chez moi, ca compile sans problème
public static boolean myfunc(String str)
{
boolean correct = true; // booleen pour savoir si la chaine contient que des 0 ou des 1
boolean exit = false; // condition de sortie de la boucle while
int pos = 0; // compteur de position sur la chaine de caractere
char c;
while(!exit) // tant que exit est faux
{
if(pos>= str.length()) // on est a la fin de la chaine on sort
{
exit = true; // exit a true-> sortie de la boucle a la prochaine etape
}
else
{
c = str.charAt(pos);
if(c!='0' && c! ='1') // est que le caractere a la position pos est différent de 0 ou de 1
{
// c'est pas le bon caractere on sort et chaine pas correcte
correct = false; // la chaine est pas bonne
exit = true; // on sort
}
}
pos++; // on passe au caractere suivant
}
return correct;
}
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 4 juin 2006 à 20:54
merci de signaler tes erreures mais j'ai deja pense et essaye d'affecter la valeur extraite dans une variable intermediaire et de faire le teste mais en fait c'est au moment du teste (où il y a "!=" ) que sa bloque.
j'ai egalement essayer en changeant le type de "c" mais sa bloque aussi.
l'erreur que je recoit c'est "icomparable type 'char' java.Lang.String"
je comprend que l'on ne peut pas comparer un string et un char, donc j'ai pensse cree deux char "1" et "0" contenant respectivement "1" et "0". maintenant l'erreur c'est que je ne peux pas affecter "1" a la variable "1" et "0" a la variable "0".
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 4 juin 2006 à 21:57
oui c'est ce que j'ai fait, seulement moi mon compilateur veut que la varaible soit de type "char" et non String c'est ca que je n'arrive pas a regler.
merci
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 juin 2006 à 13:15
j'ai trouver comment ne plus avoir l'erreur mais lors de l'execution de
"/* Traitement des donnee Binaire */
Integer Exposant=16;
Integer f=null;
Double Decimale=null;
char CaractereExtrait;
for (f=(NbCaractere-1); f>=0; f--){
CaractereExtrait=ChaineBinaire.charAt(f);
if (CaractereExtrait=='0'){
Decimale=Decimale+(Math.pow(2,Exposant)*0);
Exposant=Exposant-1;
}else{
Decimale=Decimale+(Math.pow(2,Exposant)*1);
Exposant=Exposant-1;
}
}
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 juin 2006 à 14:52
je te remerci,ca marche avec UNE SEULE PETITE erreur: lorsque l'on entre, par exemple "7", plusieur fois (2 ou 3) ce meme carctere, il est accepter. comme si il etait valide alors qu'il n'est en rien un 0 ou un 1. c'est idem pour les caracteres alphabetiques.
donc si vous voulez voir d'ou vient le pb:
/* Saisie de la chaine Binaire */
Integer NbCaractere=null;
Integer position=0;
String ChaineBinaire=null;
boolean OKa=false;
char x;
while(! OKa){
System.out.println("Entrez la chaine Binaire a convertir en nombre decimale");
try{
ChaineBinaire=IN.readLine();
/* boucle de teste de validite de la chaine */
boolean correct=true;
boolean OKb=false;
while(! OKb){
if(position>=ChaineBinaire.length()){
OKb=true;
}else{
x=ChaineBinaire.charAt(position);
if(x!='0' && x!='1'){
correct=false;
OKb=true;
}
}
position++;
}
/* Fin de boucle de teste de validite de la chaine */
if (correct==false){
for (int a=0; a<=60; a++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
}else{
NbCaractere=ChaineBinaire.length();
if ((NbCaractere==17)||(NbCaractere==0)){
for (int c=0; c<=60; c++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
}else{
OKa=true;
}
}
}catch (Exception e){}
}
je remerci tous ceux qui ont repondu a mes questions.
PS: si vous trouvez d'ou vient le pb dite le moi quand meme.
quand je trouverais comment resoudre ce leger desagrement je mettreais ma source sur le site (histoire de remercier ceux qui m'ont aider a resoudre certains problemes et de ce fait participer a la conception du prog).
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 juin 2006 à 15:01
j'ai oublier de preciser que si des 0 et des 1 sont presnt dans la chaine, ils sont pris en compte par exemple la chaine "123" en binaire me donne "4" en decimale.
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 5 juin 2006 à 15:11
Quelles remarques sur ton code :
Integer NbCaracterenull; // Interger> creation d'un objet de type entier alors que pas utilse dans ton cas utilise plutot int le type scalaire
int NbCaractere = 0;
Integer position =0; //pareil pour posistion
int position= 0;
String ChaineBinaire=null;
boolean OKa=false;
char x;
while(! OKa){
System.out.println("Entrez la chaine Binaire a convertir en nombre decimale");
try{
ChaineBinaire=IN.readLine();
/* boucle de teste de validite de la chaine */
boolean correct=true;
position = 0; // il faut remettre le compteur a zero car si tu fais la boucle principale plusieur fois le test de validité ne sera pas bon
boolean OKb =false;
while(! OKb){
if(position>=ChaineBinaire.length()){
OKb=true;
}else{
x=ChaineBinaire.charAt(position);
if(x!='0' && x!='1'){
correct=false;
OKb=true;
}
}
position++;
}
/* Fin de boucle de teste de validite de la chaine */
if (correct==false){
for (int a=0; a<=60; a++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
// remplace plutot par ca
System.out.println("Erreur de saisie! Recommencez...\n\n"); // \n c'est le caractere retour a la ligne
}else{
NbCaractere=ChaineBinaire.length();
if ((NbCaractere==17)||(NbCaractere==0)){
for (int c=0; c<=60; c++){
System.out.println();
}
System.out.println("Erreur de saisie! Recommencez...");
System.out.println();
System.out.println();
// meme remarque que au dessus
}else{
OKa=true;
}
}
}catch (Exception e){e.printStackTrace(); // permet de savoir s'il y a eu des erreurs et la ligne de l'erreur
}
}
Essaye de faire ces corrections, et regarde s'il y a encore des problèmes, (s'il y en hésite pas a renvoyer un message)
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 juin 2006 à 15:29
j'ai effectuer les corrections une par une et il y avait juste besoin que je change le type "Integer" de "position" en "int" et que je remete a 0 la variable "position" a chaque boucles (de OKa).
en revanche je n'ai pas bien compris comment fonctionnait "e.printStackTrace(); " .
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 5 juin 2006 à 15:34
Les blocs try catch permet de gerer les exceptions : par exemple quand tu veux lire un fichier et qu'une exception se produit (dans le bloc try), tu va aller dans le code du bloc catch. Si tu mets rien dans ton bloc catch, ton programme va se terminer sans que tu sache pourquoi. En mettant e.printStackTrace(); tu va avoir une description de l'exception qui est arrivé, avec la ligne qui a posé problème, ce qui peut etre utile :)