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;
}
}
A voir également:
- Probleme de lecture
- Confirmation de lecture whatsapp - Guide
- Accusé de lecture gmail - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- 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.