Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Gibt es eine einfachere Variante diese Aufgabenstellung zu lösen?
"Ein Musik-Anbieter im Internet habe folgendes Geschäftsmodell: Jeder Nutzer kann sich zunächst 5 Musikstücke kostenlos downloaden. Für die nächsten 30 Stücke muss er jeweils 20 Cent bezahlen und für jeden weiteren Download 15 Cent.
Schreiben Sie ein Java-Programm, das einem Nutzer ermöglicht, die Anzahl an insgesamt gewünschten Downloads anzugeben, das daraufhin die insgesamt entstehenden Gebühren berechnet und diese auf den Bildschirm ausgibt."
Ich habe sie folgendermaßen gelöst:
Java:
public class Musikanbieter {
public static void main(String[] args) {
int downloads = IO.readInt("Anzahl der Musiktitel: ");
int kosten = 0;
if (downloads <= 5) {
System.out.println("Kosten: 0c");
}
if (downloads >= 6 && downloads <= 30) {
for (int anzahl = 6; anzahl <= downloads; anzahl ++) {
kosten = kosten + 20;
} System.out.println("Kosten: " + kosten + "c");
}
if (downloads >= 31) {
for (int anzahl = 31; anzahl <= downloads; anzahl++) {
kosten = kosten + 15;
} System.out.println("Kosten: " + (kosten + 500) + " c");
}
}
}
Habe gerade die Anweisungen: do, for, switch, break, continue und return erlernt und würde diese natürlich nutzen um die Aufgabe zu lösen... leider ist mir keine andere Variante als mit if zu arbeiten eingefallen.
Ja, Einzeiler können sehr mächtig sein und sind oft hübsch. In diesem Fall vielleicht nicht so selbsterklärend auf den ersten Blick das hier wär wohl verständlicher:
Java:
import static java.lang.Math.*;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
Rechnung r = new Rechnung();
r.setDownloads(7);
System.out.println(r);
}
static class Rechnung {
final List<Kosten> kosten = Arrays.asList(new Kosten(20, 5), new Kosten(15, 35));
int downloads;
public void setDownloads(int downloads) {
this.downloads = downloads;
}
public int getDownloads() {
return downloads;
}
public int getPreis() {
int preis = 0;
for (int i = 0; i < kosten.size(); i++) {
Kosten item = kosten.get(i);
int teil = max(downloads - item.getStart(), 0);
if (i < kosten.size() - 1) {
teil = min(teil, kosten.get(i + 1).getStart());
}
preis += teil * item.getCents();
}
return preis;
}
@Override
public String toString() {
return "Kosten: " + getPreis() + " c";
}
}
static class Kosten {
private int cents;
private int start;
Kosten(int cents, int start) {
this.cents = cents;
this.start = start;
}
public int getCents() {
return cents;
}
public int getStart() {
return start;
}
}
}