Java - class 中 IF/ElSEIF 的货币转换
Java - Currency conversion with IF/ElSEIF in class
我目前正在从事一个简单的 java 项目,该项目将选定的货币转换为选定的货币。我似乎对 if/elseif 语句有疑问,因为每当我 运行 方法进行适当的数学运算时,原始变量保持不变。
我最初尝试通过 .equals 方法 运行 与用户输入的字符串("USD"、"EUR")进行布尔运算,但我 运行 遇到了同样的问题。
这是我认为出现错误的方法的一部分(为清楚起见添加了整个方法**):
public double doMath(double USD, double CAD, double GBP, double YEN, double EUR, double CHF, int ogCurrency, int newCurrency, double howMuch){
if (ogCurrency == 2){
if (newCurrency == 1){
howMuch = howMuch * CAD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 1){
howMuch = howMuch / CAD;
if (newCurrency == 2){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 3){
howMuch = howMuch / GBP;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 6){
howMuch = howMuch / YEN;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 4){
howMuch = howMuch / EUR;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 5){
howMuch = howMuch / CHF;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
}
/*else{
System.out.println("Something didn't add up");
}*/
return howMuch;
&& main 如果有帮助的话
public static void main(String[] args) {
double USD = 1.00;
double CAD = 1.31; // canadian dollar
double YEN = 101.20; // jap yen
double GBP = 0.77; // british pound
double EUR = 0.89; // euro
double CHF = 0.97; // swiss franc
// initiate object of class
CurrencyConverter converterBasic;
// assigning default values to fractionsBasic
converterBasic = new CurrencyConverter(1, 1, 1.00);
// new scanner for fetching input, premade class Scanner creating object in to run method(parameters/gets input from System.in)
Scanner in = new Scanner(System.in);
System.out.print("Enter your starting currency #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ");
int ogCurrency;
ogCurrency = in.nextInt();
converterBasic.setOgCurrency(ogCurrency);
System.out.print("Enter your desired currency please #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ");
int newCurrency;
newCurrency = in.nextInt();
converterBasic.setNewCurrency(newCurrency);
System.out.print("Enter how much cash you have please: ");
double howMuch;
howMuch = in.nextDouble();
converterBasic.setHowMuch(howMuch);
// use appropriate methods defined in class to compute conversion
converterBasic.doMath(USD, CAD, GBP, YEN, EUR, CHF, ogCurrency, newCurrency, howMuch);
// print appropriate output formatted using printf
System.out.printf(converterBasic.toString());
有没有人偶然发现这有什么问题,它肯定就在我眼皮底下。非常感谢,我期待听到你的智慧。
http://ideone.com/g0ECVT
Is Java "pass-by-reference" or "pass-by-value"?
Java 按值传递参数。
public static void add(int a) {
a+=2;
}
public static void main (String[] args) throws java.lang.Exception
{
int a = 2;
add(a);
System.out.println(a);//says 2
}
我个人会使用枚举。
试试这个。
import java.text.NumberFormat;
import java.util.Currency;
import java.util.Locale;
import java.util.Scanner;
public class Solution
{
public static void main(String[] args)
{
ConversionFactor ogCurrency;
ConversionFactor newCurrency;
String currencies = " #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ";
Scanner in = new Scanner(System.in);
System.out.print("Enter your starting currency" + currencies);
ogCurrency = ConversionFactor.values()[in.nextInt()];
System.out.print("Enter your desired currency " + currencies);
newCurrency = ConversionFactor.values()[in.nextInt()];
System.out.print("Enter how much cash you have please: ");
double onHand;
onHand = in.nextDouble();
in.close();
onHand = onHand / ogCurrency.value;
onHand = onHand * newCurrency.value;
Currency currentCurrency = Currency.getInstance(Locale.getDefault());
NumberFormat currencyFormatter = NumberFormat
.getCurrencyInstance(Locale.getDefault());
System.out.println(Locale.getDefault().getDisplayName() + ", "
+ currentCurrency.getDisplayName() + ": "
+ currencyFormatter.format(onHand));
}
public enum ConversionFactor
{
CAD(1.31), USD(1.0), GBP(.77), EUR(.89), CHF(.97), YEN(101.2);
ConversionFactor(double value)
{
this.value = value;
}
double value;
}
}
您的方法假定参数通过引用传递,但是 Java 通过值传递。
对同一个对象的任何操作都是有效的,并且会改变原始值,但是任何创建新对象的操作都是函数的局部操作,原始值将保持不变。
void modify(Foo foo){
foo.setValue("new value");//accepted and valid
foo = new Foo("new Value");//will create a local object
//and will not alter the original object
}
在您的方法中 howMuch = howMuch*a;
创建了新对象,因此未在原始值中引用。
所以你不能在方法内部操作一个不可变class的对象,至于不可变class改变它的值需要创建新的对象。所有 java.lang 包装器 class 都是不可变的:Boolean、Byte、Character、Double、Float、Integer、Long、Short、String source
所以你可以这样做
double howMuch;
howMuch = in.nextDouble();
converterBasic.setHowMuch(howMuch);
converterBasic.setHowMuch(converterBasic.doMath(USD, CAD, GBP, YEN, EUR, CHF, ogCurrency, newCurrency, howMuch));
这将按您预期的方式工作,它将新值设置为 converterBasic 对象的 howMuch 变量。
我目前正在从事一个简单的 java 项目,该项目将选定的货币转换为选定的货币。我似乎对 if/elseif 语句有疑问,因为每当我 运行 方法进行适当的数学运算时,原始变量保持不变。 我最初尝试通过 .equals 方法 运行 与用户输入的字符串("USD"、"EUR")进行布尔运算,但我 运行 遇到了同样的问题。
这是我认为出现错误的方法的一部分(为清楚起见添加了整个方法**):
public double doMath(double USD, double CAD, double GBP, double YEN, double EUR, double CHF, int ogCurrency, int newCurrency, double howMuch){
if (ogCurrency == 2){
if (newCurrency == 1){
howMuch = howMuch * CAD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 1){
howMuch = howMuch / CAD;
if (newCurrency == 2){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 3){
howMuch = howMuch / GBP;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 6){
howMuch = howMuch / YEN;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 4){
howMuch = howMuch / EUR;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
else if (newCurrency == 5){
howMuch = howMuch * CHF;
}
}
else if (ogCurrency == 5){
howMuch = howMuch / CHF;
if (newCurrency == 1){
howMuch = howMuch * USD;
}
else if (newCurrency == 3){
howMuch = howMuch * GBP;
}
else if (newCurrency == 6){
howMuch = howMuch * YEN;
}
else if (newCurrency == 4){
howMuch = howMuch * EUR;
}
else if (newCurrency == 2){
howMuch = howMuch * CAD;
}
}
/*else{
System.out.println("Something didn't add up");
}*/
return howMuch;
&& main 如果有帮助的话
public static void main(String[] args) {
double USD = 1.00;
double CAD = 1.31; // canadian dollar
double YEN = 101.20; // jap yen
double GBP = 0.77; // british pound
double EUR = 0.89; // euro
double CHF = 0.97; // swiss franc
// initiate object of class
CurrencyConverter converterBasic;
// assigning default values to fractionsBasic
converterBasic = new CurrencyConverter(1, 1, 1.00);
// new scanner for fetching input, premade class Scanner creating object in to run method(parameters/gets input from System.in)
Scanner in = new Scanner(System.in);
System.out.print("Enter your starting currency #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ");
int ogCurrency;
ogCurrency = in.nextInt();
converterBasic.setOgCurrency(ogCurrency);
System.out.print("Enter your desired currency please #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ");
int newCurrency;
newCurrency = in.nextInt();
converterBasic.setNewCurrency(newCurrency);
System.out.print("Enter how much cash you have please: ");
double howMuch;
howMuch = in.nextDouble();
converterBasic.setHowMuch(howMuch);
// use appropriate methods defined in class to compute conversion
converterBasic.doMath(USD, CAD, GBP, YEN, EUR, CHF, ogCurrency, newCurrency, howMuch);
// print appropriate output formatted using printf
System.out.printf(converterBasic.toString());
有没有人偶然发现这有什么问题,它肯定就在我眼皮底下。非常感谢,我期待听到你的智慧。
http://ideone.com/g0ECVT Is Java "pass-by-reference" or "pass-by-value"?
Java 按值传递参数。
public static void add(int a) {
a+=2;
}
public static void main (String[] args) throws java.lang.Exception
{
int a = 2;
add(a);
System.out.println(a);//says 2
}
我个人会使用枚举。
试试这个。
import java.text.NumberFormat;
import java.util.Currency;
import java.util.Locale;
import java.util.Scanner;
public class Solution
{
public static void main(String[] args)
{
ConversionFactor ogCurrency;
ConversionFactor newCurrency;
String currencies = " #(1: CAD, 2: USD, 3: GBP, 4: EUR, 5: CHF, 6: YEN): ";
Scanner in = new Scanner(System.in);
System.out.print("Enter your starting currency" + currencies);
ogCurrency = ConversionFactor.values()[in.nextInt()];
System.out.print("Enter your desired currency " + currencies);
newCurrency = ConversionFactor.values()[in.nextInt()];
System.out.print("Enter how much cash you have please: ");
double onHand;
onHand = in.nextDouble();
in.close();
onHand = onHand / ogCurrency.value;
onHand = onHand * newCurrency.value;
Currency currentCurrency = Currency.getInstance(Locale.getDefault());
NumberFormat currencyFormatter = NumberFormat
.getCurrencyInstance(Locale.getDefault());
System.out.println(Locale.getDefault().getDisplayName() + ", "
+ currentCurrency.getDisplayName() + ": "
+ currencyFormatter.format(onHand));
}
public enum ConversionFactor
{
CAD(1.31), USD(1.0), GBP(.77), EUR(.89), CHF(.97), YEN(101.2);
ConversionFactor(double value)
{
this.value = value;
}
double value;
}
}
您的方法假定参数通过引用传递,但是 Java 通过值传递。
对同一个对象的任何操作都是有效的,并且会改变原始值,但是任何创建新对象的操作都是函数的局部操作,原始值将保持不变。
void modify(Foo foo){
foo.setValue("new value");//accepted and valid
foo = new Foo("new Value");//will create a local object
//and will not alter the original object
}
在您的方法中 howMuch = howMuch*a;
创建了新对象,因此未在原始值中引用。
所以你不能在方法内部操作一个不可变class的对象,至于不可变class改变它的值需要创建新的对象。所有 java.lang 包装器 class 都是不可变的:Boolean、Byte、Character、Double、Float、Integer、Long、Short、String source
所以你可以这样做
double howMuch;
howMuch = in.nextDouble();
converterBasic.setHowMuch(howMuch);
converterBasic.setHowMuch(converterBasic.doMath(USD, CAD, GBP, YEN, EUR, CHF, ogCurrency, newCurrency, howMuch));
这将按您预期的方式工作,它将新值设置为 converterBasic 对象的 howMuch 变量。