Commit 9c998082 authored by Dr. Martin Goik's avatar Dr. Martin Goik

Using enum, adding javadoc image

parent be28cc4d
......@@ -4,109 +4,144 @@ package de.hdm_stuttgart.mi.sd1.aufgabe1;
* <p>Ein Fitnesstudio bietet folgende Tarife:</p>
*
* <ul>
* <li>Jährliche Einmalzahlung, siehe {@link #TARIFTYP_JAHRESVORAUSZAHLUNG}.</li>
* <li>Flextarif, siehe {@link #TARIFTYP_FLEX}.</li>
* <li>Einmalbesuch ohne gebuchten Tarif, siehe {@link #TARIFTYP_PRO_BESUCH}.</li>
* <li>Jährliche Einmalzahlung, keine Kosten pro Besuch, siehe {@link Tarif#JAHRESFLATRATE}.</li>
* <li>Jährliche Vorauszahlung und Kosten pro Besuch, siehe {@link Tarif#GEMISCHT}.</li>
* <li>Nur Kosten pro Besuch, keine jährlichen Kosten, siehe {@link Tarif#PRO_BESUCH}.</li>
* </ul>
*
* Der Rechner bietet Methoden zur Ermittlung sowohl von Kosten als auch des günstigsten Tarifs auf Basis
* der Anzahl von Besuchen pro Jahr.
* <p>Der Rechner ermittelt sowohl die Kosten als auch die günstigste Tarifart auf Basis der Anzahl von
* Besuchen pro Jahr.</p>
*/
public class FitnessTarifRechner {
/* Tariftypen */
abstract public class FitnessTarifRechner {
/**
* <p>Für einen Jahresbeitrag von {@link #kostenJahrestarif} € kann man das Studio beliebig oft besuchen.</p>
* Tarifarten zur Nutzung des Studios. Für jede Tarifart sind die Jahreskosten {@link #jahresKosten} und die
* Kosten pro Besuch {@link #kostenProBesuch} verfügbar.
*/
static public final byte TARIFTYP_JAHRESVORAUSZAHLUNG = 1;
public enum Tarif {
/**
* Keine Jahresbeitrag, nur {@link #kostenProBesuch}
*/
PRO_BESUCH(0, 12),
/**
* <p>Pro Besuch des Studios werden {@link #kostenEinmaligFlextarif} € fällig. Zusätzlich fällt eine
* einmalige Jahresgebühr von {@link #basiskostenFlextarif} € an.</p>
*/
static public final byte TARIFTYP_FLEX = 2;
/**
* Jahresbeitrag {@link #jahresKosten} und {@link #kostenProBesuch}.
*/
GEMISCHT(150, 5),
/**
* <p>Ein einmaliger Besuch ohne vorab gebuchten Tarif kostet {@link #kostenEimaligOhneTarif} €.</p>
*/
static public final byte TARIFTYP_PRO_BESUCH = 3;
/**
* Keine Kosten pro Besuch, Jahresbeitrag {@link #jahresKosten}.
*/
JAHRESFLATRATE(800, 0);
/* Kostenangaben */
Tarif(final int jahresKosten, final int kostenProBesuch) {
this.jahresKosten = jahresKosten;
this.kostenProBesuch = kostenProBesuch;
}
/**
* Kosten eines Ganzjahrestickets.
*/
static public final int kostenJahrestarif = 800;
/**
* Gesamtkosten auf Basis einer jährlichen Vorauszahlung und Kosten pro Besuch.
*
* @param anzahlBesuche Negative Werte werden als «0 Besuche» gewertet.
* @return Die jährlichen Gesamtkosten.
*/
public int getKosten(final int anzahlBesuche) {
if (anzahlBesuche <= 0) {
return jahresKosten;
} else {
return jahresKosten + anzahlBesuche * kostenProBesuch;
}
}
/**
* Jährliche Grundkosten Flextarif.
*/
static public final int basiskostenFlextarif = 150;
/**
* Jährlich anfallende Kosten in der jeweiligen Tarifart.
*/
public final int jahresKosten;
/**
* Kosten pro Besuch im Flextarif.
*/
static public final int kostenEinmaligFlextarif = 5;
/**
* Kosten pro Besuch ohne jeglichen Tarif.
*/
static public final int kostenEimaligOhneTarif = 12;
/**
* Pro Besuch des Studios anfallende Kosten.
*/
public final int kostenProBesuch;
}
/**
* Kosten pro Jahr bei vorheriger Buchung des Flextarifs {@link #TARIFTYP_FLEX}.
* Jährliche Gesamtkosten Kosten bei Nutzung des {@link Tarif#GEMISCHT} Tarifs.
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio. Negative Werte werden als
* 0 Besuche gewertet.
* @return Die Jahresgesamtkosten für alle Besuche im Jahr.
* «0 Besuche» gewertet.
* @return Die Gesamtkosten aller Besuche im Jahr.
*/
static public int getKostenFlextarif(final int anzahlBesucheProJahr) {
return -12345; // TODO: Implementiere mich richtig!
static public int getKosten_GEMISCHT_Tarif(final int anzahlBesucheProJahr) {
return Tarif.GEMISCHT.getKosten(anzahlBesucheProJahr);
}
/**
* Kosten pro Jahr ohne Buchung eines Tarifs.
* Jährliche Gesamtkosten Kosten ohne Buchung eines Tarifs.
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio. Negative Werte werden als
* 0 Besuche gewertet.
* @return Die Jahresgesamtkosten für alle Besuche im Jahr.
* @return Die Gesamtkosten aller Besuche im Jahr.
*/
static public int getKostenOhneTarif(final short anzahlBesucheProJahr) {
return -12345; // TODO: Implementiere mich richtig!
return Tarif.PRO_BESUCH.getKosten(anzahlBesucheProJahr);
}
/**
* <p>Optimaler Tariftyp basierend auf der Anzahl von Besuchsterminen pro Jahr.</p>
*
* <p>Beispiel: Ein Nutzer besucht das Studio an 200 Tagen im Jahr. Dies ergibt folgende
* <p>Beispiel: Ein Nutzer besucht das Studio an <span style="color:red">200</span> Tagen im Jahr. Dies ergibt folgende
* Gesamtkosten in den drei Tariftypen:</p>
*
* <dl>
* <dt>{@link #TARIFTYP_JAHRESVORAUSZAHLUNG}</dt>
* <dd><code>{@link #kostenJahrestarif}</code></dd>
* <table class="goikTableDefaults">
* <tr>
* <th>Tariftyp</th>
* <th>Jährliche Kosten</th>
* </tr>
* <tr>
* <td>{@link Tarif#JAHRESFLATRATE}</td>
* <td>800.- € für Jahresflatrate</td>
* </tr>
*
* <dt>{@link #TARIFTYP_FLEX}</dt>
* <dd>{@link #basiskostenFlextarif} + 200 * {@link #kostenEinmaligFlextarif}</dd>
* <tr>
* <td>{@link Tarif#GEMISCHT} (Jahreskosten 150.- € und 5.- € pro Besuch)</td>
* <td>150.- € + <span style="color:red">200</span> * 5.- €</td>
* </tr>
*
* <dt>{@link #TARIFTYP_PRO_BESUCH}</dt>
* <dd> 200 * {@link #kostenEimaligOhneTarif}</dd>
* <tr>
* <td>{@link Tarif#PRO_BESUCH} (12.-€ pro Besuch)</td>
* <td><span style="color:red">200</span> * 12.- €</td>
* </tr>
*
* </dl>
* </table>
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio.
*
* @return <p>Der günstigste Tariftyp entsprechend der Anzahl an Besuchen. Falls sich für verschiedene Tariftypen
* identische Kosten ergeben, so gilt folgende Prioritätenfolge:</p>
* @return <p>Der günstigste Tariftyp bei vorgegebener Anzahl an Besuchen pro Jahr. Bei identischen Kosten
* für verschiedene Tariftypen gilt folgende Prioritätenfolge:</p>
* <ol>
* <li>{@link #TARIFTYP_PRO_BESUCH}</li>
* <li>{@link #TARIFTYP_FLEX}</li>
* <li>{@link #TARIFTYP_JAHRESVORAUSZAHLUNG}</li>
* <li>{@link Tarif#PRO_BESUCH}</li>
* <li>{@link Tarif#GEMISCHT}</li>
* <li>{@link Tarif#JAHRESFLATRATE}</li>
* </ol>
*
*/
static public byte getOptimalenTariftyp(final short anzahlBesucheProJahr) {
return (byte) -14; // TODO: Implementiere mich richtig!
static public Tarif getOptimalenTariftyp(final short anzahlBesucheProJahr) {
final int
flatrate = Tarif.JAHRESFLATRATE.getKosten(anzahlBesucheProJahr),
gemischt = Tarif.GEMISCHT.getKosten(anzahlBesucheProJahr),
proBesuch = Tarif.PRO_BESUCH.getKosten(anzahlBesucheProJahr);
if (proBesuch <= gemischt && proBesuch <= flatrate) {
return Tarif.PRO_BESUCH;
} else { // proBesuch ist nicht der günstigste Tarif, dann muss es einer der zwei übrigen Tarife sein:
if (gemischt <= flatrate) {
return Tarif.GEMISCHT;
} else {
return Tarif.JAHRESFLATRATE;
}
}
}
}
\ No newline at end of file
......@@ -2,18 +2,20 @@ package de.hdm_stuttgart.mi.sd1.aufgabe1;
/**
* <p>Bewertungen für das Würfelspiel »Mäxchen« (Schwäbisch »Mäxle«). Gespielt wird mit zwei
* Würfeln, jeweils mit Augenzahl 1 bis 6.</p>
* <p>Bewertungen für das Würfelspiel «Mäxchen» (Schwäbisch «Mäxle»). Gespielt wird mit zwei
* Würfeln, jeweils mit Augenzahl 1 bis 6:</p>
*
* <p>Die Schreibweise (5|2) bedeutet eine Augenzahl 2 für den ersten und eine Augenzahl 5 für den zweiten
* Würfel. Neben solchen »normalen« Ereignissen gibt es folgende Sonderfälle:</p>
* <object data="doc-files/maexle.png" type="image/png"></object>
*
* <p>Die Schreibweise «(2|5)» bedeutet die Augenzahlen «2» und «5» auf den beiden
* Würfeln, wobei die Reihenfolge irrelevant ist. Neben solchen «normalen» Ereignissen gibt es folgende Sonderfälle:</p>
*
* <dl>
* <dt>(1|1), (2|2),... (6|6), </dt>
* <dd>Haben beide Würfel dieselbe Augenzahl, so handelt es sich um einen Pasch.</dd>
* <dt>Pasch:</dt>
* <dd>(1|1), (2|2),... (6|6), beide Würfel haben dieselbe Augenzahl.</dd>
*
* <dt>(2|1) bzw. (1|2)</dt>
* <dd>Dieser Sonderfall ist ein »Mäxchen« bzw. schwäbisch ein »Mäxle«.</dd>
* <dt>«Mäxchen» bzw. «Mäxle»:</dt>
* <dd>(2|1) bzw. (1|2)</dd>
*
* </dl>
*/
......
......@@ -4,6 +4,8 @@ import de.hdm_stuttgart.mi.sd1.aufgabe1.Maexchen;
/**
* <p>Darstellung eines Mäxchen Wurfs, z.B. (3|2), siehe auch die Erläuterungen in {@link Maexchen}.</p>
*
* <object data="../aufgabe1/doc-files/maexle.png" type="image/png"></object>
*/
public class MaexleWurf {
......@@ -21,7 +23,7 @@ public class MaexleWurf {
* <p>Vergleiche den aktuellen Wurf mit einem anderen Wurf: Welches Paar von Augenzahlen liegt höher? Nachfolgend
* die Werte in aufsteigender Reihenfolge:</p>
*
* <table border="1" style="border-collapse: collapse;" >
* <table class="goikTableDefaults">
* <tr>
* <th >Typ</th>
* <th >Würfe aufsteigend</th>
......
......@@ -30,17 +30,19 @@ public class Test_FitnessTarifRechner extends ExaminationTestDefaults {
}
/**
* Kosten im Flextarif
* Kosten im GEMISCHT Tarif
*/
@Test public void test_260() {
Assert.assertEquals(FitnessTarifRechner.basiskostenFlextarif, FitnessTarifRechner.getKostenFlextarif((short) 0));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT.jahresKosten,
FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 0));
}
@Test public void test_280() {
Assert.assertEquals(260, FitnessTarifRechner.getKostenFlextarif((short) 22));
Assert.assertEquals(655, FitnessTarifRechner.getKostenFlextarif((short) 101));
Assert.assertEquals(260, FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 22));
Assert.assertEquals(655, FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 101));
}
@Test public void test_300() {
Assert.assertEquals(FitnessTarifRechner.basiskostenFlextarif, FitnessTarifRechner.getKostenFlextarif((short) -14));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT.jahresKosten,
FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) -14));
}
// Abschnitt optimale Tarifbestimmung.
......@@ -50,25 +52,25 @@ public class Test_FitnessTarifRechner extends ExaminationTestDefaults {
*/
@Test
public void test_400() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_PRO_BESUCH, FitnessTarifRechner.getOptimalenTariftyp((short) 21));
Assert.assertEquals(FitnessTarifRechner.Tarif.PRO_BESUCH, FitnessTarifRechner.getOptimalenTariftyp((short) 21));
}
/**
* Niedrigste Besuchszahl, bei welcher sich der Flextarif lohnt.
* Niedrigste Besuchszahl, bei welcher sich der GEMISCHT lohnt.
*/
@Test
public void test_420() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_FLEX, FitnessTarifRechner.getOptimalenTariftyp((short) 22));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT, FitnessTarifRechner.getOptimalenTariftyp((short) 22));
}
/**
* Grenztest: 800€ sowohl für Flex- als auch Ganzjahrestarif.
* Grenztest: 800€ sowohl für GEMISCHT- als auch Ganzjahrestarif.
*/
@Test public void test_480() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_FLEX, FitnessTarifRechner.getOptimalenTariftyp((short) 130));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT, FitnessTarifRechner.getOptimalenTariftyp((short) 130));
}
/**
* Grenztest: 800€ sowohl für Flex- als auch Ganzjahrestarif.
* Grenztest: Erstmalig ist Flatrate am günstigsten.
*/
@Test public void test_500() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_JAHRESVORAUSZAHLUNG, FitnessTarifRechner.getOptimalenTariftyp((short) 131));
Assert.assertEquals(FitnessTarifRechner.Tarif.JAHRESFLATRATE, FitnessTarifRechner.getOptimalenTariftyp((short) 131));
}
}
}
\ No newline at end of file
......@@ -4,122 +4,143 @@ package de.hdm_stuttgart.mi.sd1.aufgabe1;
* <p>Ein Fitnesstudio bietet folgende Tarife:</p>
*
* <ul>
* <li>Jährliche Einmalzahlung, siehe {@link #TARIFTYP_JAHRESVORAUSZAHLUNG}.</li>
* <li>Flextarif, siehe {@link #TARIFTYP_FLEX}.</li>
* <li>Einmalbesuch ohne gebuchten Tarif, siehe {@link #TARIFTYP_PRO_BESUCH}.</li>
* <li>Jährliche Einmalzahlung, keine Kosten pro Besuch, siehe {@link Tarif#JAHRESFLATRATE}.</li>
* <li>Jährliche Vorauszahlung und Kosten pro Besuch, siehe {@link Tarif#GEMISCHT}.</li>
* <li>Nur Kosten pro Besuch, keine jährlichen Kosten, siehe {@link Tarif#PRO_BESUCH}.</li>
* </ul>
*
* Der Rechner bietet Methoden zur Ermittlung sowohl von Kosten als auch des günstigsten Tarifs auf Basis
* der Anzahl von Besuchen pro Jahr.
* <p>Der Rechner ermittelt sowohl die Kosten als auch die günstigste Tarifart auf Basis der Anzahl von
* Besuchen pro Jahr.</p>
*/
public class FitnessTarifRechner {
abstract public class FitnessTarifRechner {
/**
* <p>Für einen Jahresbeitrag von {@link #kostenJahrestarif} € kann man das Studio beliebig oft besuchen.</p>
* Tarifarten zur Nutzung des Studios. Für jede Tarifart sind die Jahreskosten {@link #jahresKosten} und die
* Kosten pro Besuch {@link #kostenProBesuch} verfügbar.
*/
static public final byte TARIFTYP_JAHRESVORAUSZAHLUNG = 1;
public enum Tarif {
/**
* Keine Jahresbeitrag, nur {@link #kostenProBesuch}
*/
PRO_BESUCH(0, 12),
/**
* <p>Pro Besuch des Studios werden {@link #kostenEinmaligFlextarif} € fällig. Zusätzlich fällt eine
* einmalige Jahresgebühr von {@link #basiskostenFlextarif} € an.</p>
*/
static public final byte TARIFTYP_FLEX = 2;
/**
* Jahresbeitrag {@link #jahresKosten} und {@link #kostenProBesuch}.
*/
GEMISCHT(150, 5),
/**
* <p>Ein einmaliger Besuch ohne vorab gebuchten Tarif kostet {@link #kostenEimaligOhneTarif} €.</p>
*/
static public final byte TARIFTYP_PRO_BESUCH = 3;
/**
* Keine Kosten pro Besuch, Jahresbeitrag {@link #jahresKosten}.
*/
JAHRESFLATRATE(800, 0);
/**
* Kosten eines Ganzjahrestickets.
*/
static public final int kostenJahrestarif = 800;
Tarif(final int jahresKosten, final int kostenProBesuch) {
this.jahresKosten = jahresKosten;
this.kostenProBesuch = kostenProBesuch;
}
/**
* Jährliche Grundkosten Flextarif.
*/
static public final int basiskostenFlextarif = 150;
/**
* Gesamtkosten auf Basis einer jährlichen Vorauszahlung und Kosten pro Besuch.
*
* @param anzahlBesuche Negative Werte werden als «0 Besuche» gewertet.
* @return Die jährlichen Gesamtkosten.
*/
public int getKosten(final int anzahlBesuche) {
if (anzahlBesuche <= 0) {
return jahresKosten;
} else {
return jahresKosten + anzahlBesuche * kostenProBesuch;
}
}
/**
* Kosten pro Besuch im Flextarif.
*/
static public final int kostenEinmaligFlextarif = 5;
/**
* Jährlich anfallende Kosten in der jeweiligen Tarifart.
*/
public final int jahresKosten;
/**
* Kosten pro Besuch ohne jeglichen Tarif.
*/
static public final int kostenEimaligOhneTarif = 12;
/**
* Pro Besuch des Studios anfallende Kosten.
*/
public final int kostenProBesuch;
}
/**
* Kosten pro Jahr bei vorheriger Buchung des Flextarifs {@link #TARIFTYP_FLEX}.
* Jährliche Gesamtkosten Kosten bei Nutzung des {@link Tarif#GEMISCHT} Tarifs.
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio. Negative Werte werden als
* 0 Besuche gewertet.
* @return Die Jahresgesamtkosten für alle Besuche im Jahr.
* «0 Besuche» gewertet.
* @return Die Gesamtkosten aller Besuche im Jahr.
*/
static public int getKostenFlextarif(final int anzahlBesucheProJahr) {
if (anzahlBesucheProJahr < 0) {
return basiskostenFlextarif;
} else {
return basiskostenFlextarif + anzahlBesucheProJahr * kostenEinmaligFlextarif;
}
static public int getKosten_GEMISCHT_Tarif(final int anzahlBesucheProJahr) {
return Tarif.GEMISCHT.getKosten(anzahlBesucheProJahr);
}
/**
* Kosten pro Jahr ohne Buchung eines Tarifs.
* Jährliche Gesamtkosten Kosten ohne Buchung eines Tarifs.
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio. Negative Werte werden als
* 0 Besuche gewertet.
* @return Die Jahresgesamtkosten für alle Besuche im Jahr.
* @return Die Gesamtkosten aller Besuche im Jahr.
*/
static public int getKostenOhneTarif(final short anzahlBesucheProJahr) {
if (anzahlBesucheProJahr < 0) {
return 0;
} else {
return kostenEimaligOhneTarif * anzahlBesucheProJahr;
}
return Tarif.PRO_BESUCH.getKosten(anzahlBesucheProJahr);
}
/**
* <p>Optimaler Tariftyp basierend auf der Anzahl von Besuchsterminen pro Jahr.</p>
*
* <p>Beispiel: Ein Nutzer besucht das Studio an 200 Tagen im Jahr. Dies ergibt folgende
* <p>Beispiel: Ein Nutzer besucht das Studio an <span style="color:red">200</span> Tagen im Jahr. Dies ergibt folgende
* Gesamtkosten in den drei Tariftypen:</p>
*
* <dl>
* <dt>{@link #TARIFTYP_JAHRESVORAUSZAHLUNG}</dt>
* <dd><code>{@link #kostenJahrestarif}</code></dd>
* <table class="goikTableDefaults">
* <tr>
* <th>Tariftyp</th>
* <th>Jährliche Kosten</th>
* </tr>
* <tr>
* <td>{@link Tarif#JAHRESFLATRATE}</td>
* <td>800.- € für Jahresflatrate</td>
* </tr>
*
* <dt>{@link #TARIFTYP_FLEX}</dt>
* <dd>{@link #basiskostenFlextarif} + 200 * {@link #kostenEinmaligFlextarif}</dd>
* <tr>
* <td>{@link Tarif#GEMISCHT} (Jahreskosten 150.- € und 5.- € pro Besuch)</td>
* <td>150.- € + <span style="color:red">200</span> * 5.- €</td>
* </tr>
*
* <dt>{@link #TARIFTYP_PRO_BESUCH}</dt>
* <dd> 200 * {@link #kostenEimaligOhneTarif}</dd>
* <tr>
* <td>{@link Tarif#PRO_BESUCH} (12.-€ pro Besuch)</td>
* <td><span style="color:red">200</span> * 12.- €</td>
* </tr>
*
* </dl>
* </table>
*
* @param anzahlBesucheProJahr Anzahl der jährlichen Besuche im Studio.
*
* @return <p>Der günstigste Tariftyp entsprechend der Anzahl an Besuchen. Falls sich für verschiedene Tariftypen
* identische Kosten ergeben, so gilt folgende Prioritätenfolge:</p>
* @return <p>Der günstigste Tariftyp bei vorgegebener Anzahl an Besuchen pro Jahr. Bei identischen Kosten
* für verschiedene Tariftypen gilt folgende Prioritätenfolge:</p>
* <ol>
* <li>{@link #TARIFTYP_PRO_BESUCH}</li>
* <li>{@link #TARIFTYP_FLEX}</li>
* <li>{@link #TARIFTYP_JAHRESVORAUSZAHLUNG}</li>
* <li>{@link Tarif#PRO_BESUCH}</li>
* <li>{@link Tarif#GEMISCHT}</li>
* <li>{@link Tarif#JAHRESFLATRATE}</li>
* </ol>
*
*/
static public byte getOptimalenTariftyp(final short anzahlBesucheProJahr) {
static public Tarif getOptimalenTariftyp(final short anzahlBesucheProJahr) {
final int
flatrate = Tarif.JAHRESFLATRATE.getKosten(anzahlBesucheProJahr),
gemischt = Tarif.GEMISCHT.getKosten(anzahlBesucheProJahr),
proBesuch = Tarif.PRO_BESUCH.getKosten(anzahlBesucheProJahr);
final int flextarifGesamtkosten = getKostenFlextarif(anzahlBesucheProJahr);
if (getKostenOhneTarif(anzahlBesucheProJahr) <= flextarifGesamtkosten) {
return TARIFTYP_PRO_BESUCH;
} else {
if (flextarifGesamtkosten <= kostenJahrestarif) {
return TARIFTYP_FLEX;
if (proBesuch <= gemischt && proBesuch <= flatrate) {
return Tarif.PRO_BESUCH;
} else { // proBesuch ist nicht der günstigste Tarif, dann muss es einer der zwei übrigen Tarife sein:
if (gemischt <= flatrate) {
return Tarif.GEMISCHT;
} else {
return TARIFTYP_JAHRESVORAUSZAHLUNG;
return Tarif.JAHRESFLATRATE;
}
}
}
......
package de.hdm_stuttgart.mi.sd1.aufgabe1;
/**
* <p>Bewertungen für das Würfelspiel »Mäxchen« (Schwäbisch »Mäxle«). Gespielt wird mit zwei
* Würfeln, jeweils mit Augenzahl 1 bis 6.</p>
* <p>Bewertungen für das Würfelspiel «Mäxchen» (Schwäbisch «Mäxle»). Gespielt wird mit zwei
* Würfeln, jeweils mit Augenzahl 1 bis 6:</p>
*
* <p>Die Schreibweise (5|2) bedeutet die Augenzahlen 5 und 2 auf den beiden
* Würfeln. Neben solchen »normalen« Ereignissen gibt es folgende Sonderfälle:</p>
* <object data="doc-files/maexle.png" type="image/png"></object>
*
* <p>Die Schreibweise «(2|5)» bedeutet die Augenzahlen «2» und «5» auf den beiden
* Würfeln, wobei die Reihenfolge irrelevant ist. Neben solchen «normalen» Ereignissen gibt es folgende Sonderfälle:</p>
*
* <dl>
* <dt>Pasch:</dt>
* <dd>(1|1), (2|2),... (6|6), beide Würfel haben dieselbe Augenzahl.</dd>
* <dt>Pasch:</dt>
* <dd>(1|1), (2|2),... (6|6), beide Würfel haben dieselbe Augenzahl.</dd>
*
* <dt>»Mäxchen« bzw. schwäbisch »Mäxle«:</dt>
* <dd>(2|1) bzw. (1|2)</dd>
* <dt>«Mäxchen» bzw. «Mäxle»:</dt>
* <dd>(2|1) bzw. (1|2)</dd>
*
* </dl>
*/
......
......@@ -4,6 +4,8 @@ import de.hdm_stuttgart.mi.sd1.aufgabe1.Maexchen;
/**
* <p>Darstellung eines Mäxchen Wurfs, z.B. (3|2), siehe auch die Erläuterungen in {@link Maexchen}.</p>
*
* <object data="../aufgabe1/doc-files/maexle.png" type="image/png"></object>
*/
public class MaexleWurf {
......@@ -30,7 +32,7 @@ public class MaexleWurf {
* <p>Vergleiche den aktuellen Wurf mit einem anderen Wurf: Welches Paar von Augenzahlen liegt höher? Nachfolgend
* die Werte in aufsteigender Reihenfolge:</p>
*
* <table border="1" style="border-collapse: collapse;" >
* <table class="goikTableDefaults">
* <tr>
* <th >Typ</th>
* <th >Würfe aufsteigend</th>
......
......@@ -30,17 +30,19 @@ public class Test_FitnessTarifRechner extends ExaminationTestDefaults {
}
/**
* Kosten im Flextarif
* Kosten im GEMISCHT Tarif
*/
@Test public void test_260() {
Assert.assertEquals(FitnessTarifRechner.basiskostenFlextarif, FitnessTarifRechner.getKostenFlextarif((short) 0));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT.jahresKosten,
FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 0));
}
@Test public void test_280() {
Assert.assertEquals(260, FitnessTarifRechner.getKostenFlextarif((short) 22));
Assert.assertEquals(655, FitnessTarifRechner.getKostenFlextarif((short) 101));
Assert.assertEquals(260, FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 22));
Assert.assertEquals(655, FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) 101));
}
@Test public void test_300() {
Assert.assertEquals(FitnessTarifRechner.basiskostenFlextarif, FitnessTarifRechner.getKostenFlextarif((short) -14));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT.jahresKosten,
FitnessTarifRechner.getKosten_GEMISCHT_Tarif((short) -14));
}
// Abschnitt optimale Tarifbestimmung.
......@@ -50,25 +52,25 @@ public class Test_FitnessTarifRechner extends ExaminationTestDefaults {
*/
@Test
public void test_400() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_PRO_BESUCH, FitnessTarifRechner.getOptimalenTariftyp((short) 21));
Assert.assertEquals(FitnessTarifRechner.Tarif.PRO_BESUCH, FitnessTarifRechner.getOptimalenTariftyp((short) 21));
}
/**
* Niedrigste Besuchszahl, bei welcher sich der Flextarif lohnt.
* Niedrigste Besuchszahl, bei welcher sich der GEMISCHT lohnt.
*/
@Test
public void test_420() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_FLEX, FitnessTarifRechner.getOptimalenTariftyp((short) 22));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT, FitnessTarifRechner.getOptimalenTariftyp((short) 22));
}
/**
* Grenztest: 800€ sowohl für Flex- als auch Ganzjahrestarif.
* Grenztest: 800€ sowohl für GEMISCHT- als auch Ganzjahrestarif.
*/
@Test public void test_480() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_FLEX, FitnessTarifRechner.getOptimalenTariftyp((short) 130));
Assert.assertEquals(FitnessTarifRechner.Tarif.GEMISCHT, FitnessTarifRechner.getOptimalenTariftyp((short) 130));
}
/**
* Grenztest: 800€ sowohl für Flex- als auch Ganzjahrestarif.
* Grenztest: Erstmalig ist Flatrate am günstigsten.
*/
@Test public void test_500() {
Assert.assertEquals(FitnessTarifRechner.TARIFTYP_JAHRESVORAUSZAHLUNG, FitnessTarifRechner.getOptimalenTariftyp((short) 131));
Assert.assertEquals(FitnessTarifRechner.Tarif.JAHRESFLATRATE, FitnessTarifRechner.getOptimalenTariftyp((short) 131));
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment