Probleme de lecture

Résolu/Fermé
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018 - Modifié le 23 juin 2017 à 11:14
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018 - 23 juin 2017 à 12:45
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;
    }
}
A voir également:

2 réponses

Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
23 juin 2017 à 10:04
Bonjour anaurel,

Peux-tu commencer par mettre ton code entre les balises code ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 juin 2017 à 11:17
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
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
23 juin 2017 à 12:45
merci beaucoup
0
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018
23 juin 2017 à 12:03
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
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018
Modifié le 23 juin 2017 à 12:33
 /**
 * 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