Probleme de lecture
Résolu
anaurel
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
anaurel Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
anaurel Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Le programme ne lit pas le nombre à convertir et saute directement sur la base finale . ( Voir mes commentaires ).
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:
- Probleme de lecture
- Confirmation de lecture whatsapp - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
- Lecture gratuite - Télécharger - Vie quotidienne
2 réponses
/** * 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; } }
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.