Probleme de lecture

Résolu
anaurel Messages postés 48 Statut Membre -  
anaurel Messages postés 48 Statut Membre -
Bonjour,

Le programme ne lit pas le nombre à convertir et saute directement sur la base finale . ( Voir mes commentaires ).

/**
 * Ce programme convertit un nombre lu au clavier d'une base en une autre toutes deux entrées au clavier
 */
package test;

import java.util.Scanner;

public class Test {
    static String val = "0123456789ABCDEF";
    static int decimal;
    static Scanner sc = new Scanner(System.in);

    public static void main(String argv[]) {
        affiche();
    }

    public static void affiche() {
        // Cette méthode affiche le nombre converti
        int bInit, bFinal;
        String nombre = new String();
        bInit = lectureBase();
        // Lecture de la base d'entrée
        nombre = lectureNombre(bInit);
        // Lecture du nombre à convertir
        bFinal = lectureBase();
        // Lecture de la base de sortie
        toDecimal(nombre, bInit);
        // Conersion en base décimale
        System.out.println("(" + nombre + ")base" + bInit + " donne (" + toBase(bFinal) + ") en base" + bFinal);
    }

    public static StringBuilder toBase(int bFinal) {
        // Cette méthode convertit du décimal en une base quelconque
        StringBuilder valeur = new StringBuilder();
        do {
            valeur.append(val.charAt(decimal % bFinal));
            decimal /= bFinal;
        } while (decimal != 0);
        return valeur.reverse();
    }

    public static void toDecimal(String p, int base) {
        /* Cette méthode convertit en décimal */
        int i = 1;
        decimal = val.indexOf(p.charAt(0));
        while (i < p.length())
            decimal = decimal * base + val.indexOf(p.charAt(i++));
    }

    public static boolean control(String nbre, int base) {
        // Cette méthode vérifie qu'un nombre est écrit dans une base
        int i = 0;
        boolean faux = true;
        while (i < nbre.length())
            if (base <= val.indexOf(nbre.charAt(i++))) {
                faux = false;
                break;
            }
        return faux;
    }

    public static int lectureBase() {
        // Cette méthode permet de lire une base
        int base;
        boolean faux = false;
        do {
            if (faux)
                System.out.println("Veuillez entrer une base valide !!");
            System.out.println("Entrer la base initiale");
            base = sc.nextInt();
            faux = (base > 16 || base < 2);
        } while (faux);
        return base;
    }

    public static String lectureNombre(int base) {
        // Cette méthode permet de lire le nombre à convertir
        String nbre = new String();
        boolean faux = true;
        do {
            if (!faux)
                System.out.println("Veuillez entrer une donnée valide !!");
            System.out.println("Entrer la valeur");
            nbre = sc.nextLine();
            faux = nbre.matches("[0-9A-Z]+");
            if (!faux)
                continue;
            if (faux = !control(nbre, base))
                System.out.println(nbre + " ne peut être en base " + base);
        } while (faux);
        return nbre;
    }
}

2 réponses

  1. Felice_ Messages postés 271 Statut Membre 11
     
    Bonjour anaurel,

    Peux-tu commencer par mettre ton code entre les balises code ?
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Je l'ai réédité la question, il faut plutôt utiliser les balises <code java></code> que <code></code> car cela permet d'avoir la coloration syntaxique Java et ça évite le bug d'interprétation des astérisques comme étant des puces (ce qui casse toute la mise en forme)
      0
      1. anaurel Messages postés 48 Statut Membre > KX Messages postés 19031 Statut Modérateur
         
        merci beaucoup
        0
    2. anaurel Messages postés 48 Statut Membre
       
      Le problème est déjà réglé

      En fait dans la méthode LectureBase , j'ai oublié de vider le flux d'entrée.

      il faut juste un sc.nextLine() avant le return.
      0
  2. anaurel Messages postés 48 Statut Membre
     
     /**
     * Ce programme convertit un nombre lu au clavier d'une base en une autre toutes deux entrées au clavier
     * Author : Anatole Aurel HAGBE 
     * Date: 22 June 2017
     */
    package test;
    
     import java.util.Scanner;
     
     
     public class Test
     {
    	static String val= "0123456789ABCDEF"; 
            static int decimal;
            static Scanner sc = new Scanner(System.in);
            
    	
           public static void main(String argv[])
    
    	 {
    		 affiche(); 
    	 }
    	 
    	 
    	 public static void affiche()
    	 
    	 {       
                 // Cette méthode affiche le nombre converti 
                 
                    int bInit,bFinal;
                    String nombre=new String();                     
                    
                    bInit=lectureBase("d'entrée");            // Lecture de la base d'entrée
                    
                    nombre=lectureNombre(bInit);    // Lecture du nombre à convertir
                    
                    bFinal=lectureBase("de sortie");           // Lecture de la base de sortie
                    
                    toDecimal(nombre,bInit);        // Conersion en base décimale
                    
                    System.out.println("("+ nombre +")base"+bInit +" donne ("+toBase(bFinal)+") en base" +bFinal );
                		 
    	  }	 
            
             
    	 public static StringBuilder toBase(int bFinal)
    	 {                                              
                 // Cette méthode convertit du décimal en une base quelconque 
                 
                      StringBuilder valeur=new StringBuilder();
    						 			 
    			 do
    			 {
                                    valeur.append(val.charAt(decimal % bFinal));
    				 decimal/=bFinal;
    				 
    			 } while(decimal!=0);
    			 
    			return  valeur.reverse();			
                            
    	 } 
             
             
             public static void toDecimal(String p,int base)
             {
                  /*Cette méthode convertit en décimal */
                 
                 int i=1;
                 
                  decimal=val.indexOf(p.charAt(0));
                   
                while(i<p.length())
                     decimal=decimal*base + val.indexOf(p.charAt(i++));
                    
             }
             
             public static boolean control(String nbre,int base)
             {
                 // Cette méthode vérifie qu'un nombre est écrit dans une base 
                 
                 int i=0;
                 boolean faux= true;
                 
                 while(i< nbre.length())
                     if(base <= val.indexOf(nbre.charAt(i++)))
                     {
                         faux=false;
                         break;
                     }
                 
                 return faux;
             }
             
            public static int lectureBase(String chaine)
            {
             // Cette méthode permet de lire une base
                
             int base;
             boolean faux=false;
             
                 do
                    {
                        if(faux)
               
                 System.out.println("Veuillez entrer une base valide !!");
                        
                        System.out.println("Entrer la base "+ chaine);
                        base=sc.nextInt();
                        
                        faux=(base >16 || base <2);
                        
                    } while(faux);
                 
                  sc.nextLine(); // Vider le flux de lecture
                  
                return base;
            }
    
            
            public static  String lectureNombre(int base)
            {
               // Cette méthode permet de lire le nombre à convertir
                          
                String nbre=new String();
                boolean faux=true;
                
                 do
                    {
                        if(!faux)
                            System.out.println("Veuillez entrer une donnée valide !!");
                        
                        System.out.println("Entrer la valeur");
                        nbre=sc.nextLine();
                        
                        faux= nbre.matches("[0-9A-Z]+");
                         
                        if(!faux)
                            continue;
                        
                        if(faux=!control(nbre,base))
                                System.out.println(nbre +" ne peut être en base "+base);                                                
                        
                    }while(faux);
                 
                return nbre;
            }
            
     }
    
    0