/* Cette version utilise une nouvelle classe Devise, ce qui améliore la modularité du programme et donc sa réutilisation et sa lisibilité. Les problèmes de la deuxième version sont toujours présents : - utilisation de Error(). Cette solution est améliorable ; - pas de possibilité de rajout d'une devise ; - problème d'efficacité de la méthode rechercheDevise(String) ; Nouveau problème : il n'existe que des devises à taux variable. Il est donc possible de modifier le taux de conversion, alors que ce devrait être interdit. */ /** * La classe Conversion permet de convertir une somme en Euro depuis * une devise référencée et inversement. */ public class Conversion { private static final String [] nomsDevises = {"Francs", "Marks", "Pesetas", "Escudos", "Lires"}; private static final double [] tauxChange = {6.55957, 1.95583, 166.386, 200.482, 1936.270}; private static final Devise [] devises = new Devise[nomsDevises.length]; static { for (int i = 0; i < devises.length; ++i) devises[i] = new Devise(nomsDevises[i], tauxChange[i]); } private static Devise chercherDevise (String nom) { for (int i = 0; i < devises.length; i++) { if (devises[i].nom().equals(nom)) return devises[i]; } return null; } public static Devise devise(String nom) { Devise d = chercherDevise(nom); if (d == null) throw new Error("Devise " + nom + " inconnue"); return d; } public static boolean deviseTraitee (String nom) { return (chercherDevise(nom) != null); } public static Devise [] devisesTraitees () { Devise [] copieDevises = new Devise[devises.length]; System.arraycopy(devises, 0, copieDevises, 0, devises.length); return copieDevises; } public static String [] nomsDevisesTraitees () { String [] copieNomsDevises = new String[devises.length]; System.arraycopy(nomsDevises, 0, copieNomsDevises, 0, nomsDevises.length); return copieNomsDevises; } public static void main(String [] args) { double valeurAConvertir = Double.valueOf(args[0]).doubleValue(); String nomDevise = args[1]; Devise d = devise(nomDevise); System.out.println(d); System.out.println(d.conversionEnEuro(valeurAConvertir) + " Euros"); } }