[英]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.