g_threepwood Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 (endret) 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 9. juni 2013 av g_threepwood Lenke til kommentar
_Xorcist Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 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
g_threepwood Skrevet 9. juni 2013 Forfatter Del Skrevet 9. juni 2013 Jeg må bruke en array, men jeg skjønner ikke hvordan jeg skal gå frem. Lenke til kommentar
SUSE and Pepsi Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 Jeg ville anbefale å endre trådtittelen, slik at det blir enklere å vite hva tråden handler om. Lenke til kommentar
g_threepwood Skrevet 9. juni 2013 Forfatter Del Skrevet 9. juni 2013 Hvordan gjør jeg det? Lenke til kommentar
Malvado Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 Det gjør du ved å redigere første innlegget, jeg har nå endret den til noe som er litt mer forståelig. Lenke til kommentar
g_threepwood Skrevet 9. juni 2013 Forfatter Del Skrevet 9. juni 2013 (endret) 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 9. juni 2013 av g_threepwood Lenke til kommentar
Hårek Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 Størrelsen på arrayet. F.eks exchangeRate = new double[10]; Lenke til kommentar
jonny Skrevet 9. juni 2013 Del Skrevet 9. juni 2013 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
Diablonor Skrevet 10. juni 2013 Del Skrevet 10. juni 2013 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
g_threepwood Skrevet 10. juni 2013 Forfatter Del Skrevet 10. juni 2013 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå