Gå til innhold

Anbefalte innlegg

Jeg skal lage en klasse Valutakurser som beskriver valutakurser, dvs. sammenhengen mellom en valuta som representeres som en streng (for eksempel ”USD”) og et tall (for eksempel 5.49). Valutakurser skal ha metoder for å sette og hente kurser for forskjellige valutaer. Dersom v er objekt av klassen Valutakurser skal det være mulig å gjøre følgende metodekall:

- v.settKurs(”USD”, 5.49): setter kursen for valutaen ”USD” til 5.49. Dersom valutaen ”USD” ikke finnes fra før skal den legges til. Hvis den finnes fra før skal den endres til den nye kursen.

- x = v.hentKurs(”GBP”): setter x til kursen for valutaen ”GBP”. Hvis valutaen ikke finnes, skal verdien 0 returneres.

- x = v.antallKurser(): setter x til antall valutakurser som finnes i v.

- x = v.gjennomsnittskurs(): setter x til gjennomsnittet av alle kursene.

 

 

Hvordan kan jeg lage klassen Valutakurser ved å bruke en array til å holde på samlingen av valutakurser?

Endret av g_threepwood
Lenke til kommentar
Videoannonse
Annonse

Anbefaler deg å ta en titt på: http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

 

Det passer bedre her enn en array. get()- og put()-metodene i et Map samsvarer bra med settKurs() og hentKurs(). size() mapper til antallKurser() og gjennomsnittet kan du beregne ved å loope over map.entrySet(). Å hente ut gjennomsnittet for alle valutakurser på tvers av valutaer høres for øvrig ut som et helt ubrukelig use case, men sånn er det jo noen ganger i skoleoppgaver.

Lenke til kommentar

Dette vil opprette et valutaobjekt, men hva skal inn i [] i konstruktøren?

public class Valutakurser
{
private double[] exchangeRate;
private String name;

public Valutakurser()
{
	exchangeRate = new double[];
	name = currencyName;
}  
}

Endret av g_threepwood
Lenke til kommentar

Her er et forslag til hvordan klassen kan se ut, med den ene metoden implementert (koden er ikke testet, kan være feil der).

 

class Valutakurser {

 private final int MAKS_ANT_VALUTAKURSER = 20;

 private String[] vNavn = new String[MAKS_ANT_VALUTAKURSER];
 private double[] vKurs = new double[MAKS_ANT_VALUTAKURSER];

 private int antVK = 0;  // antall lagrede valutakurser

 public void settKurs(String valutanavn, double valutakurs) {
   for (int i = 0; i < antVK; i++) {
  if (vNavn[i].equals(valutanavn)) {
    vKurs[i] = valutakurs;
    return;
  }
   }
   if (antVK < MAKS_ANT_VALUTAKURSER) {
  vNavn[antVK] = valutanavn;
  vKurs[antVK] = valutakurs;
  antVK++;
   }
   else {
     System.out.println("Kunne ikke lagre valutakursen " + valutanavn
    + " pga. plassmangel");
   }
 }
}

Lenke til kommentar

Jeg ville laget en intern klasse for Valuta. Størrelsen på array skal værelik antall valutaer du skal ha i systemet.

 

Jeg setter også opp valuteIndex, som gir deg index til en gitt valuta i arrayen, eller -1 om den ikke finnes. Se hvordan jeg bruker den i hentKurs for å sette opp de siste metodene dine :)

 

class ValutaKurser {
   class Valuta {
    double kurs;
    String navn;
    public Valuta(String navn) {
	    this.navn = navn;
    }
   }
   Valuta[] kurser = new Valuta[2]; // La oss kun forholde oss til USD og GBP
   private int valutaIndex(String navn) {
    for(int i = 0; i < kurser.length; i++) {
	    if(kurser[i] != NULL && kurser[i].compareTo(navn) == 0)
		    return i;
	   return -1;
   }
   public double hentKurs(String navn) {
    int index = valutaIndex(navn);
    if(index > 0)
	    return kurser[index].kurs;
    return 0;
   }

}

Lenke til kommentar

Dette er et annet forslag jeg mottok:

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;
	   }
   }
}

 

Kan noen forklare hvorfor feltene og konstruktøren ser slik ut? Hvorfor er det tre felter, og hva betyr dette:

this.names = {};
this.rates = {};

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...