Probleme de lecture
Résolu
anaurel
Messages postés
48
Statut
Membre
-
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 ).
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
-
Bonjour anaurel,
Peux-tu commencer par mettre ton code entre les balises code ? -
/** * 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; } }