簡體   English   中英

Java-使用IF / ElSEIF進行貨幣換算

[英]Java - Currency conversion with IF/ElSEIF in class

我目前正在研究一個簡單的Java項目,該項目將選定的貨幣轉換為選定的貨幣。 我似乎對if / elseif語句有疑問,因為每當我運行該方法進行適當的數學運算時,原始變量都保持不變。 我最初嘗試使用用戶通過.equals方法輸入的字符串運行布爾操作,但是遇到了同樣的問題。

這是我認為出現錯誤的方法的一部分(為清楚起見,整個方法都增加了**):

        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 Java是“按引用傳遞”還是“按值傳遞”?

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; 創建新對象,因此未在原始值中引用。

因此,您不能在方法內部操作Immutable類的對象,因為更改不可變類的值需要創建新的Object。 所有java.lang軟件包的包裝器類都是不可變的:布爾,字節,字符,雙精度,浮點數,整數,長整型,短整型,字符串

所以你可以做這樣的事情

double howMuch;
howMuch = in.nextDouble();
converterBasic.setHowMuch(howMuch);
converterBasic.setHowMuch(converterBasic.doMath(USD, CAD, GBP, YEN, EUR, CHF, ogCurrency, newCurrency, howMuch));

這將按您期望的方式工作,它將新值設置為converterBasic Object的變量數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM