/** * La classe Conversion permet de convertir une somme en Euro. * * Version 2. */ public class Conversion { /* * Les problèmes reglés dans cette deuxième version sont : * * les noms des identificateurs * * la complétude de la classe ; * * utilisation de Error(). * * Cette solution est améliorable : * * pas de possibilité de rajout d'une devise * * pas de possibilité de rajouter des fonctionnalités sur une devise * (plusieurs noms par exemple) * * problème d'efficacité de la méthode conversion */ private static final String[] DEVISES = { "Franc", "Mark", "Dollard", "Euro" }; private static final double[] TAUX_CHANGE = { 6.55957, 1.95583, 1.2713, 1. }; /* * L'utilisation de cette méthode évite de la duplication de code. Mais la * bonne solution serait l'utilisation d'une exception au niveau de * indiceDevise(). */ private static int rechercheIndiceDevise(String devise) { for (int i = 0; i < DEVISES.length; i++) { if (DEVISES[i].equals(devise)) { return i; } } return -1; } private static int indiceDevise(String devise) { int indice = rechercheIndiceDevise(devise); if (indice == -1) { throw new Error("Devise " + devise + " inconnue"); } else { return indice; } } private static double conversion(double valeurAConvertir, String devise, boolean versEuro) { int indice = indiceDevise(devise); return valeurAConvertir * ((versEuro) ? 1 / TAUX_CHANGE[indice] : TAUX_CHANGE[indice]); } public static double conversionEnEuro(double valeurAConvertir, String devise) { return conversion(valeurAConvertir, devise, true); } public static double conversionDepuisEuro(double valeurAConvertir, String deviseCible) { return conversion(valeurAConvertir, deviseCible, false); } public static boolean deviseTraitee(String devise) { return rechercheIndiceDevise(devise) != -1; } public static String[] devisesTraitees() { String[] copieDevises = new String[DEVISES.length]; System.arraycopy(DEVISES, 0, copieDevises, 0, DEVISES.length); return copieDevises; } public static double tauxDeChange(String devise) { return TAUX_CHANGE[indiceDevise(devise)]; } public static void main(String[] args) { double valeurAConvertir = Double.valueOf(args[0]).doubleValue(); String devise = args[1]; if (deviseTraitee(devise)) { double valeurConvertie = conversionEnEuro(valeurAConvertir, devise); System.out.println(valeurConvertie + " Euros"); } else { String[] devises = devisesTraitees(); System.out.print("Devise inconnue (devises traitées ="); for (int i = 0; i < devises.length; ++i) { System.out.print(" " + devises[i]); } System.out.println(")"); } } }