De base Convertisseur de Devises - la Recherche de commentaires
C'est ma base convertisseur de devises pour mon intro de classe java. Je suis censé être en mesure de convertir entre yens, dollars, livres sterling et en euros à l'aide statique de taux. Il fonctionne, mais j'étais curieux de savoir si je l'ai fait dans la manière la plus efficace possible. Il semble assez long et ressemble à un énorme gâchis. Juste envie de quelques commentaires.
import java.util.Scanner;
public class currency
{
public currency()
{
char us_dollar_sym = 36;
char pound_sym = 163;
char yen_sym = 165;
char euro_sym = 8364;
String us_dollar = "Dollars";
String pound = "Pounds";
String yen = "Yen";
String euro = "Euros";
double rate = 0;
//Interface
System.out.println("Welcome to the Currency Converter Program \n");
System.out.println("Use the following codes to input your currency choices: \n 1 - US dollars \n 2 - Euros \n 3 - British Pounds \n 4 - Japanese Yen \n");
//
System.out.println("Please choose the input currency:");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();
String inType = null;
switch(choice) {
case 1: inType = "US Dollars >> " + us_dollar_sym; break;
case 2: inType = "Euros >> " + euro_sym; break;
case 3: inType = "British Pounds >> " + pound_sym; break;
case 4: inType = "Japanese Yen >> " + yen_sym; break;
default:
System.out.println("Please restart the program & enter a number from the list.");
return;
}
System.out.println("Please choose the output currency");
int output = in.nextInt();
System.out.printf("Now enter the input in " + inType);
double input = in.nextDouble();
if (choice == output)
System.out.println("Same currency no need to convert");
if (choice == 1 && output == 2)
{
double dollar_euro_rate = 0.78391;
rate = input * dollar_euro_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + dollar_euro_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, euro, rate);
}
else if (choice == 1 && output == 3){
double dollar_pound_rate = 0.621484;
rate = input * dollar_pound_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + dollar_pound_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, pound, rate);
}
else if (choice == 1 && output == 4){
double dollar_yen_rate = 107.174;
rate = input * dollar_yen_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + dollar_yen_rate + " Dollars to %s = %.2f\n", (char)us_dollar_sym, yen, rate);
}
if (choice == 2 && output == 1)
{
double euro_dollar_rate = 1.27579;
rate = input * euro_dollar_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + euro_dollar_rate + " Euros to %s = %.2f\n", (char)euro_sym, us_dollar, rate);
}
else if (choice == 2 && output == 3)
{
double euro_pound_rate = 0.792648;
rate = input * euro_pound_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + euro_pound_rate + " Euros to %s = %.2f\n", (char)euro_sym, pound, rate);
}
else if (choice == 2 && output == 4)
{
double euro_yen_rate = 136.708;
rate = input * euro_yen_rate;
System.out.printf( "%s" + input + " at a conversion rate of " + euro_yen_rate + " Euros to %s = %.2f\n", (char)euro_sym, yen, rate);
}
if (choice == 3 && output == 1)
{
double pound_dollar_rate = 1.60972;
System.out.printf( "%s" + input + " at a conversion rate of " + pound_dollar_rate + " Pounds to %s = %.2f\n", (char)pound_sym, us_dollar, rate);
}
else if (choice == 3 && output == 2)
{
double pound_euro_rate = 1.26161;
System.out.printf( "%s" + input + " at a conversion rate of " + pound_euro_rate + " Pounds to %s = %.2f\n", (char)pound_sym, euro, rate);
}
else if (choice == 3 && output == 4)
{
double pound_yen_rate = 172.511;
System.out.printf( "%s" + input + " at a conversion rate of " + pound_yen_rate + " Pounds to %s = %.2f\n", (char)pound_sym, yen, rate);
}
if (choice == 4 && output == 1)
{
double yen_dollar_rate = 0.00932574;
System.out.printf( "%s" + input + " at a conversion rate of " + yen_dollar_rate + " Yen to %s = %.2f\n", (char)yen_sym, us_dollar, rate);
}
else if (choice == 4 && output == 2)
{
double yen_euro_rate = 0.00730615;
System.out.printf( "%s" + input + " at a conversion rate of " + yen_euro_rate + " Yen to %s = %.2f\n", (char)yen_sym, euro, rate);
}
else if (choice == 4 && output == 3)
{
double yen_pound_rate = 0.00579135;
System.out.printf( "%s" + input + " at a conversion rate of " + yen_pound_rate + " Yen to %s = %.2f\n", (char)yen_sym, pound, rate);
}
System.out.println("Thank you for using the currency converter");
}
}
- Je suppose que ce programme fonctionne (comme vous l'avez écrit il y a)? Si c'est le cas, alors c'est mieux de poster dans la Revue de Code à la place.
Vous devez vous connecter pour publier un commentaire.
Je suis toujours prudent d'utiliser une entrée entière. Si quelqu'un char, votre programme serait susceptible de bloquer comme une exception peut se produire. L'acceptation d'un char de ce numéro pourrait être une alternative plus sûre.
Lorsque vous cochez la case "choix" et de "sortie" dans la même instruction si elle nécessite plus de ressources. L'imbrication des instructions if pourrait améliorer l'efficacité. Ce serait d'avoir de l'instruction if pour le choix avec les si des instructions pour la sortie en leur sein.
Puisque vous vous référez à votre monnaie en tant que int, je voudrais utiliser un n par m la matrice de stockage, le taux de change. n serait la première monnaie et m le second. Avec les deux int, vous pouvez retracer le taux de change correct.
La diagonale de la matrice sera de 1 (depuis USD >> USD =1 ).
Enfin, écrire une fonction pour calculer le taux de change et de renvoyer le texte correspondant (vous pouvez utiliser une table de hachage pour que, avec l'int comme une clé et le nom ( chaîne de caractères) en tant que valeur)
etc...
D'exprimer toute votre taux comme un multiplicateur d'une valeur standard, par exemple l'utilisation de l'USD de la valeur standard. Puis la conversion des valeurs pour le GBP serait 1.60, le dollar serait de 1,0 et de l'Euro serait la 1.29. Puis la conversion de calcul serait:
De Valeur * À Partir De La Conversion * 1/Pour La Conversion
Par exemple de 1 livre sterling et l'Euro serait:
1 * 1.60 * (1/1.29) = 1.24
Si vous stockez toutes vos tarifs dans une table de hachage, alors vous pouvez éviter les instructions de commutation complètement.
Pourquoi vous êtes en utilisant ce moyen de convertir des devises. Vous avez la JSR 354 de l'Argent et de la Monnaie API voici quelques exemples que vous pouvez utiliser, il est vraiment facile à utiliser et rapide: