String>char || char>String

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 3 juin 2006 à 16:22
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Derniè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 ???????
 
Merci

21 réponses

scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
3 juin 2006 à 16:36
Salut
Fais comme ça : ChaineInverse= "" + ChaineBinaire.charAt(d);

A++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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();
    }"

Ausecour...
merci de votre aide...
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 juin 2006 à 17:13
Pour verifier que ta chaine contient que des 0 ou des 1
bool correct = true;
bool exit = false;
int pos = 0;
String str;
while(!exit)
{
    if(pos>= str.length())
    {
       exit = true;
    }
    else
    {
       if(str.charAt(pos) != '0' || str.charAt(pos) != '1')
       {
           correct = false;
            exit = true;
       }
    }
    pos++;
}

apres si correct == true, la chaine est bonne, sinon il y a une erreur

++
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
3 juin 2006 à 17:18
salut est ce que tu pourrait me dire a quoi correspond chaqune de tes variable par exemple
"pos"
"correct" c'est simple a deviner c'est bon

merci
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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
}
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
3 juin 2006 à 17:35
merci mais mon editeur me dit que "!=" n'est pas correcte .
comment je peux faire?
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
3 juin 2006 à 18:41
Au passage, je sais pas si sa sert a grand chose mais j'utilise "JCreator" comme editeur java.
merci
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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;
    }

++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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".

comment faire?
merci a tous...
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
4 juin 2006 à 21:37
Dans le test tu as bien mis des cotes simples ?
'0' = le caractere 0
"0" = une  String  qui contient 0
Chez moi ( java 1.4 ) , ca compile parfaitement

++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
4 juin 2006 à 22:05
Tu peut monter la ligne qui pose problème ?
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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;
   }
  }
  
  System.out.println(Decimale);"

il y a une erreure.
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
5 juin 2006 à 13:24
C'est peut etre l'initialisation de NbCaractere qui est pas bonne.
Avant de faire la boucle fais :
NbCaractere = ChaineBinaire.length();

++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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).

++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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.

voila c'etait tous ++
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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)

++
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
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(); " .

Si non ca marche super bien
meci
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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 :)

++
0
Rejoignez-nous