【问题标题】:Difficulty on check the data when it pass to a array from text file in Java从Java中的文本文件传递到数组时检查数据的困难
【发布时间】:2016-02-23 00:41:20
【问题描述】:

我正在创建三个类, 首先,ExchangeRate 类用于存储文本文件中的数据。

code  public class ExchangeRate {
private String Local;
private String Foreign;
private double Rate;

public ExchangeRate(String Px, String Py, double ER) {
    Local = Px;
    Foreign = Py;
    Rate = ER;
}
public void setLocal(String L) {
    Local = L;
}

public void setForeign(String F) {
    Foreign = F;
}

public void setRate(double R) {
    Rate = R;
}

public String getLocal() {
    return Local;
}

public String getForeign() {
    return Foreign;
}

public double getRate() {
    return Rate;
}

}

然后,我创建 CurrencyExchange 类来转换从构造函数获取的汇率。

enter code here public class CurrencyExchange {
public int ratesize = 0;
public ExchangeRate[] allrecord = new ExchangeRate[42];
private String name1;
private String name2;
private double num;
private double num2;

public void convert(String currencyCode1, String currencyCode2,
        double amount, boolean printFlag) {
    name1 = currencyCode1;
    name2 = currencyCode2;
    num = amount;               //change getLocal() to static?
        if (name1 == ExchangeRate.getLocal()
                && name2 == ExchangeRate.getForeign()) {
            num2 = num * ExchangeRate.getRate();
        }

    if (printFlag == true) {
        printInfo();
    }
}

public void addExchangeRate(ExchangeRate exRate) {
    allrecord[ratesize] = exRate;
    setratesize();
}

public void setratesize() {
    ratesize++;
}


public String getname1() {
    return name1;
}

public String getname2() {
    return name2;
}

public double getnum() {
    return num;
}

public void printInfo() {
    System.out.println("Direct Conversion: Converted " + name1 + " " + num
            + " to " + name2 + " "+num2);
}

}

但是我很难检查货币是否可以转换为发短信类上指示的国家名称,例如'eur'和'jpy。表示根据 text.file 上的汇率将 EUR 转换为 JPT。如果我改变那个检查部分 "If(name1==ExchangeRate.getLocal()" 为静态,Local 会成为文本中的最后一个数据,无法勾选。所以,我想知道如何解决这个问题?

测试类

enter code here import java.io.File;

导入 java.io.FileNotFoundException; 导入 java.util.Scanner;

公共类 MP2_Task1 { public static void main(String[] args) {

    CurrencyExchange currencyExchange = new CurrencyExchange();

    String fileName = "exchange_rate.txt";
    Scanner in = null;
    try { // start reading data file
        in = new Scanner(new File(fileName));
        while (in.hasNextLine()) {
            String line = in.nextLine();
            String token[] = line.split(",");

            if (token.length == 3) {
                // create ExchangeRate instance for storing the exchange
                // rate record
                ExchangeRate exRate = new ExchangeRate(token[0], token[1],
                        Double.parseDouble(token[2]));
                // adding the new exchange rate record to the
                // CurrencyExchange instance
                currencyExchange.addExchangeRate(exRate);
            }
        }
    } catch (FileNotFoundException e) {
        System.out.println(fileName + " cannot be found!");
    } finally {
        if (in != null) {
            in.close();
        }
    }

    String hkd = "HKD";
    String usd = "USD";
    String jpy = "JPY";
    String gbp = "GBP";
    String cny = "CNY";
    String eur = "EUR";
    String chf = "CHF";

    // Task 1 - Simple money conversions
    double oriAmount1 = 1000;
    currencyExchange.convert(hkd, gbp, oriAmount1, true);

    double oriAmount2 = 55;
    currencyExchange.convert(cny, usd, oriAmount2, true);

    double oriAmount3 = 300;
    currencyExchange.convert(eur, jpy, oriAmount3, true);

    double oriAmount4 = 8000;
    currencyExchange.convert(hkd, chf, oriAmount4, true);

    System.out.println();



    }
}

预期输出:

直接兑换:将 1000.0 港元兑换成 83.8 英镑

直接换算:将 55.0 人民币换算成 8.6735 美元

直接转换:将 300.0 欧元转换为 39739.23 日元

直接兑换:将 HKD 8000.0 转换为 CHF 1026.4

关于汇率的整个文本文件

港元,美元,1.290000e-01

港币、日元、1.569860e+01

港币、英镑、8.380000e-02

港币、人民币、8.178000e-01

港币,欧元,1.185000e-01

港币、瑞士法郎、1.283000e-01

美元、港币、7.750800e+00

美元、日元、1.216885e+02

美元、英镑、6.499000e-01

美元、人民币、6.342400e+00

美元、欧元、9.187000e-01

美元、瑞士法郎、9.951000e-01

日元,港币,6.370000e-02

日元,美元,8.200000e-03

日元、英镑、5.300000e-03

JPY,CNY,5.210000e-02

JPY,EUR,7.500000e-03

JPY,CHF,8.200000e-03

英镑、港币、1.192560e+01

英镑,美元,1.538600e+00

英镑、日元、1.872341e+02

英镑、人民币、9.758600e+00

英镑,欧元,1.413500e+00

英镑,瑞士法郎,1.531000e+00

人民币,港币,1.222100e+00

CNY,USD,1.577000e-01

人民币、日元、1.918650e+01

人民币,英镑,1.025000e-01

CNY,EUR,1.448000e-01

CNY,CHF,1.569000e-01

欧元、港币、8.437100e+00

欧元、美元、1.088600e+00

欧元、日元、1.324641e+02

欧元、英镑、7.075000e-01

欧元、人民币、6.904000e+00

欧元,瑞士法郎,1.083100e+00

瑞士法郎,港币,7.789700e+00

瑞士法郎,美元,1.005000e+00

瑞士法郎、日元、1.222988e+02

瑞士法郎,英镑,6.532000e-01

瑞士法郎,人民币,6.374200e+00

瑞士法郎,欧元,9.233000e-01

【问题讨论】:

标签: java


【解决方案1】:
if (name1.equals(ExchangeRate.getLocal())
      && name2.equals(ExchangeRate.getForeign())) {
  num2 = num * ExchangeRate.getRate();
}

== 比较对象引用而不是值。

【讨论】:

  • 谢谢,但是如果我需要将 ExchangeRate 类的 getLocal() 和 getForeign() 方法更改为静态?这是因为我更改后仍然无法进行正确的比较。输出将是 Direct Conversion: Converted HKD 1000.0 to GBP 0.0
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多