Valutakurserna är fiktiva övningsvärden. Avgiften redovisas separat i ursprungsvalutan och dras inte av från det belopp som omvandlas. Vid exakt en halv enhet avrundas den positiva avgiften uppåt.
Nyckelord: If-satsen, else-satsen
Växelkursen
Skriv ett program som hjälper ett växlingskontor att omvandla valuta mellan valutorna:
- SEK (Svenska kronor)
- EUR (Euro)
- USD (Amerikansk dollar)
- GBP (Brittisk pund)
Växlingskontoret vill tjäna lite pengar (såklart) på att erbjuda den här tjänsten och ska ta en avgift på 0,25%, som ska avrundas till närmaste heltal i den valutan som kunden vill växla från.
Din uppgift blir att skriva ett program som:
- Frågar användaren vilken valuta som det ska omvandlas från och till
- Skriv ut resultatet
- Skriv ut avgiften för valutaomvandlingen
Exempelvis:
“Ange vilken valuta du vill omvandla från: “
“Hur stor summa vill du omvandla: “
“Ange vilken valuta du vill omvandla till: “
Du kan använda följande växelkurser när du löser problemet:
| SEK - EUR | 0,098 |
| SEK - USD | 0,12 |
| SEK - GBP | 0,084 |
| EUR - USD | 1,19 |
| EUR - GBP | 0,85 |
| USD - GBP | 0,72 |
Valutakurser. Exempelvis: 1 SEK är värd 0,098 Euro eller 1 EUR är värd 0,85 GBP.
Alla valutakurser ska vara konstanta under programmets gång.
Programmet ska varna och stänga av programmet om användaren försöker växla från en valuta till samma valuta, eller om användaren ger en felaktig inmatning till programmet.
Ledtråd 1
Tjuvkika inte för tidigt, försök en gång till innan du fortsätter med ledtrådarna ;-)
Ledtråd 2
Spara alla valutakurser som variabler. För att konvertera en valuta åt motsats kan du enkelt använda 1/valutan. Exempelvis:
final double SEK2EUR = 0.098;
// Konvertera till EUR2SEK
double EUR2SEK = 1/SEK2EUR;
För att skapa en konstant använder vi det reserverade order final.
Ledtråd 3
Använd klassen Scanner för att ta emot input från användaren.
import java.util.Scanner; // Importerar klassen Scanner
public class Uppgift8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
}
}
Du kan spara ett värde från Scanner när användaren skriver in data, exempelvis
int number = input.nextInt(); // Sparar ned ett tal
String text = input.nextLine(); // Sparar nästa rad som en sträng
Ledtråd 4
Använd equals för att jämföra en textsträng med en annan, exempelvis:
if(currencyFrom.equals("SEK")){
System.out.println("Valutan är SEK");
}
Svar
Ett exempel på hur man löser uppgiften. Observera att det finns flera rätta svar. I koden finns kommentarer som man kan läsa för att förstå tankegången.
// Importerar klassen Scanner som behövs för att läsa inputs från användaren
import java.util.Scanner;
public class Uppgift8 {
public static void main(String[] args) {
// Definera alla valutakurser enligt tabell
final double SEK2EUR = 0.098;
final double SEK2USD = 0.12;
final double SEK2GBP = 0.084;
final double EUR2USD = 1.19;
final double EUR2GBP = 0.85;
final double USD2GBP = 0.72;
final double EUR2SEK = 1/SEK2EUR;
final double USD2SEK = 1/SEK2USD;
final double USD2EUR = 1/EUR2USD;
final double GBP2SEK = 1/SEK2GBP;
final double GBP2EUR = 1/EUR2GBP;
final double GBP2USD = 1/USD2GBP;
// Skapa ett scanner-objekt
Scanner input = new Scanner(System.in);
// Fråga efter vilken valuta du vill omvandla från
System.out.println("Ange vilken valuta du vill omvandla från (SEK, EUR, USD, GBP): ");
String currencyFrom = input.nextLine();
/* Kontrollera att användaren har skrivit en godkänd valuta.
* Avsluta programmet om inmatningen var felaktig
*/
if (!(currencyFrom.equals("SEK") || currencyFrom.equals("EUR") || currencyFrom.equals("USD") || currencyFrom.equals("GBP"))){
System.out.println("Felaktig valuta eller samma valuta");
return;
}
// Fråga efter vilken valuta du vill omvandla till
System.out.println("Ange vilken valuta du vill omvandla till (SEK, EUR, USD, GBP): ");
String currencyTo = input.nextLine();
/* Kontrollera att användaren har skrivit en godkänd valuta.
* Avsluta programmet om inmatningen var felaktig
*/
if (!(currencyTo.equals("SEK") || currencyTo.equals("EUR") || currencyTo.equals("USD") || currencyTo.equals("GBP"))){
System.out.println("Felaktig valuta eller samma valuta");
return;
}
// Fråga efter hur mycket användaren vill växla
System.out.println("Hur mycket vill du växla?: ");
if (!input.hasNextDouble()) {
System.out.println("Felaktigt belopp"); return;
}
double amount = input.nextDouble();
if (!Double.isFinite(amount) || amount <= 0) {
System.out.println("Beloppet måste vara positivt och ändligt"); return;
}
// Bestäm växlingsfaktor
double currency = 0;
if(currencyFrom.equals("SEK") && currencyTo.equals("EUR")) {
currency = SEK2EUR;
} else if (currencyFrom.equals("SEK") && currencyTo.equals("USD")){
currency = SEK2USD;
} else if (currencyFrom.equals("SEK") && currencyTo.equals("GBP")){
currency = SEK2GBP;
} else if (currencyFrom.equals("EUR") && currencyTo.equals("USD")){
currency = EUR2USD;
} else if (currencyFrom.equals("EUR") && currencyTo.equals("GBP")){
currency = EUR2GBP;
} else if (currencyFrom.equals("USD") && currencyTo.equals("GBP")){
currency = USD2GBP;
} else if (currencyFrom.equals("EUR") && currencyTo.equals("SEK")){
currency = EUR2SEK;
} else if (currencyFrom.equals("USD") && currencyTo.equals("SEK")){
currency = USD2SEK;
} else if (currencyFrom.equals("GBP") && currencyTo.equals("SEK")){
currency = GBP2SEK;
} else if (currencyFrom.equals("USD") && currencyTo.equals("EUR")){
currency = USD2EUR;
} else if (currencyFrom.equals("GBP") && currencyTo.equals("EUR")){
currency = GBP2EUR;
} else if (currencyFrom.equals("GBP") && currencyTo.equals("USD")){
currency = GBP2USD;
} else {
System.out.print("Du kan inte växla från och till samma valuta (" + currencyFrom + " != " + currencyTo + ")");
System.out.println("Felaktig valuta eller samma valuta");
return;
}
// Räkna ut och skriv ut växlingskursen. Math.round() avrundar en positiv avgift till närmaste heltal.
System.out.println(amount + " " + currencyFrom + " motsvarar " + amount * currency + " " + currencyTo + " vilket ger en växelavgift på " + Math.round(0.0025 * amount) + " " + currencyFrom);
}
}