-2

為替レートを記述するクラス ExchangeRates を作成する必要があります (通貨は文字列 (たとえば「USD」) と数値 (たとえば 5.49) で表されます)。ExhangeRates には、さまざまな通貨のレートを設定および取得するためのメソッドが必要です。v がクラス ExhangeRates のオブジェクトである場合、次のメソッド呼び出しが可能でなければなりません。

  • v.setRate(”USD”, 5.49): 通貨「USD」のレートを 5.49 に設定します。通貨「USD」がまだ存在しない場合は、追加する必要があります。存在する場合は、新しいレートに変更する必要があります。
  • x = v.getRate(”GBP”): 通貨「GBP」のレートとして x を設定します。通貨が存在しない場合は、0 を返します。
  • x = v.amountOfRates(): v に存在する為替レートの量として x を設定します。
  • x = v.averageRate(): x をすべてのレートの平均として設定します。

配列を使用してこのクラスを作成するにはどうすればよいですか?

これは私がこれまでに持っているものです:

public class ExchangeRates {
private String name;
private float[] rate;

/**
 * Constructor
 */
public ExchangeRates(String currencyName, float exchangeRate) {
    name = currencyName;
    rate = new float[];
}

public void setExhangeRate (String currencyName, float exchangeRate) {
    name = this.currencyName;
    rate = this.exchangeRate;
}
4

2 に答える 2

0

1 つの悪いバージョン:

public class ExchangeRates {

  private String name;
  private String[] names;
  private float[] rates;

  public ExchangeRates( String name ) {
    this.name = name;
    this.names = {};
    this.rates = {};
  }

  public int amountOfRates() {
    return rates.length;
  }

  public float averageRate() {
    float sum = 0;
    for ( float rate : rates )
      sum += rate;
    return sum / rates.length;
  }

  public float getRate( String name ) {
    for ( int i = names.length - 1; i >= 0; i -- )
      if ( names[ i ].equals( name ) )
        return rates[ i ];
    return 0;
  }

  public void setRate( String name, float rate ) {
    for ( int i = names.length - 1; i >= 0; i -- )
      if ( names[ i ].equals( name ) ) {
        rates[ i ] = rate;
        return;
      }
    names = Array.copyOf( names, names.length + 1 );
    rates = Array.copyOf( rates, rates.length + 1 );
    names[ names.length - 1 ] = name;
    rates[ rates.length - 1 ] = rate;
  }

}

2 番目の悪いバージョン (OOP に関しては少し改善):

public class ExchangeRates {

  private static class Rate {
    private String name;
    private float rate;
    Rate( String name, float rate ) {
      this.name = name;
      this.rate = rate;
    }
  }

  private String name;
  private Rate[] rates;

  public ExchangeRates( String name ) {
    this.name = name;
    this.rates = {};
  }

  public int amountOfRates() {
    return rates.length;
  }

  public float averageRate() {
    float sum = 0;
    for ( Rate rate : rates )
      sum += rate.rate;
    return sum / rates.length;
  }

  public float getRate( String name ) {
    for ( Rate rate : rates )
       if ( rate.name.equals( name ) )
        return rate.rate;
    return 0;
  }

  public void setRate( String name, float rate ) {
    for ( Rate rate : rates )
      if ( rate.name.equals( name ) ) {
        rate.rate = rate;
        return;
      }
    rates = Array.copyOf( rates, rates.length + 1 );
    rates[ rates.length - 1 ] = new Rate( name, rate );
  }

}

本当は地図を使うべきです。

public class ExchangeRates {

  private String name;
  private Map<String,Float> rates;

  public ExchangeRates( String name ) {
    this.name = name;
    this.rates = new HashMap<String,Float>();
  }

  public int amountOfRates() {
    return rates.size();
  }

  public float averageRate() {
    float sum = 0;
    for ( Float rate : rates.values() )
      sum += rate;
    return sum / rates.size();
  }

  public float getRate( String name ) {
    Float rate = rates.get( name );
    return rate == null ? 0 : rate.floatValue();
  }

  public void setRate( String name, float rate ) {
    rates.put( name, rate );
  }

}
于 2013-06-09T14:37:36.223 に答える