/** * La classe Conversion permet de convertir une somme en Euro depuis * l'ancienne monnaie d'un pays adhérent à l'Euro et inversement. */ class Conversion { /* Les problèmes regles dans cette deuxième version sont : - les noms des indentificateurs ; - la complétude de la classe ; - utilisation de Error(). Cette solution est améliorable ; Problèmes restant : - 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 = {"Francs", "Marks", "Pesetas", "Escudos", "Lires"}; private static final double [] TAUX_CHANGE = {6.55957, 1.95583, 166.386, 200.482, 1936.270}; /* L'utilisation de cette méthode évite de la duplication de code. Mais la bonne solution est 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 tauxChange (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(")"); } } }