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 变量。