Commit b2fb1d3d authored by Dr. Martin Goik's avatar Dr. Martin Goik

Minor errors fixed, cosmetics

parent 4823c7cf
......@@ -91,7 +91,6 @@
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
......@@ -116,4 +115,4 @@
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
</project>
package de.hdm_stuttgart.mi.sd1.aufgabe2;
/**
* Umrechnung zweier verschiedener Darstellungen von Breitenangaben.
* Darstellungen von Breitenangaben entweder als (Grad, Minuten, Sekunden) oder dezimal.
*
* <p>Längen- oder Breitenangaben können in Grad, Winkelminuten und Winkelsekunden angegeben werden. Dabei gilt:</p>
* <p>Längen- oder Breitenangaben können als (Grad, Winkelminuten, Winkelsekunden) dargestellt werden. Dabei gilt:</p>
*
* <ul>
* <li>360° Grad entsprechen dem Vollkreis.</li>
* <li>60 Winkelminuten ergeben 1 Grad: 60´ == 1°.</li>
* <li>60 Winkelsekunden ergeben eine Winkelminute: 60´´ = 1´.</li>
* </ul>
* <table class="goikTableDefaults">
* <tr>
* <td style="width: 35em">
* <ul>
* <li>360° Grad entsprechen einem Vollkreis.</li>
* <li>60 Winkelminuten ergeben 1 Grad: 60´ == 1°.</li>
* <li>60 Winkelsekunden ergeben eine Winkelminute: 60´´ = 1´.</li>
* </ul>
* </td>
* <td style="width: 30em"><b>Beispiel:</b> Die geographische Breitenangabe von Stuttgart lautet
* (<b style="color: red;">48°</b>,<b style="color: green;">46′</b>,<b style="color: blue;">56″</b>). Die Angabe
* »Nord« wird in dieser Aufgabe ignoriert.</td>
* </tr>
* </table>
*
* <p>Beispiel: Die geographische Breitenangabe von Stuttgart lautet <b style="color: red;">48°</b>
* <b style="color: green;">46′</b> <b style="color: blue;">56″</b> (Nord, wird in dieser Aufgabe ignoriert).</p>
* <p></p>
*
* <p>Alternativ gibt es auch eine dezimale Graddarstellung: Diese geht ebenfalls von einem Vollkreis zu 360° aus.
* Allerdings werden die Minuten- und Sekundenanteile als Dezimalbruch angegeben. Die geographische Breite
* <b style="color: red;">48°</b> <b style="color: green;">46′</b> <b style="color: blue;">56″</b> von Stuttgart
* beispielsweise ergibt sich in dieser Darstellung zu:</p>
* <p>Alternativ gibt es auch eine <em>dezimale</em> Graddarstellung: Diese geht ebenfalls von einem Vollkreis zu 360°
* aus. Allerdings werden die Minuten- und Sekundenanteile als Dezimalbruch angegeben. Die geographische Breite
* (<b style="color: red;">48°</b>, <b style="color: green;">46′</b>, <b style="color: blue;">56″</b>) beispielsweise
* von Stuttgart ergibt sich in dieser Darstellung zu:</p>
*
* \[\color{red}{48} + {\color{green}{46}\over 60} + {\color{blue}{56} \over {60 \times 60}} = 48.782222\dots \]
*
* <p>Instanzen von {@link Geo} können aus beiden Darstellungen erzeugt werden:</p>
*
* <pre>final Geo stuttartBreite1 = new Geo(48, 46, 56),
* stuttartBreite2 = new Geo(48.782222); // Identische Breite bis auf Rundungsfehler</pre>
* <pre>final Geo stuttartBreite1 = new Geo(<b style="color: red;">48°</b>, <b style="color: green;">46′</b>,<b style="color: blue;">56″</b>), // Grad, Minuten, Sekunden
* stuttartBreite2 = new Geo(48.782222); // Dezimalangabe: Identische Breite bis auf Rundungsfehler</pre>
*
* <section class="implementationHints">
* <h3>Hinweis:</h3>
*
* <p>Verwenden Sie als Interndarstellung die Angabe in Grad, Winkelminuten und -sekunden. Sie müssen dann
* für den Konstruktor aus einer dezimalen <code>double</code> Gradangabe zunächst Werte wie 48.782222 in den
* ganzzahligen Gradanteil 48 und den gebrochenen Anteil 0.782222 zerlegen. Dazu kann die Methode
* {@link Math#floor(double)} in Zusammenarbeit mit einer cast Operation verwendet werden.</p>
* <p>Verwenden Sie als Interndarstellung die Angabe in (Grad, Minuten, Sekunden). Sie müssen dann
* für den Konstruktor aus einer dezimalen <code>double</code> Gradangabe im ersten Schritt Werte wie 48.782222 in
* den ganzzahligen Gradanteil <b style="color: red;">48°</b> und den gebrochenen Anteil 0.782222 zerlegen. Dazu
* kann die Methode {@link Math#floor(double)} in Zusammenarbeit mit einer cast Operation verwendet werden.</p>
* </section>
*
* <p>Eine Instanz von {@link Geo} stellt beide Darstellungen bereit:</p>
* <p>Jede Instanz von {@link Geo} stellt beide Darstellungen bereit:</p>
*
* <pre>final Geo breite = ... ;
* <pre>final Geo breite = ... ;
*
* final int grad = breite.grad,
* minuten = breite.minuten,
* sekunden = breite.sekunden;
*
* final double breiteDezimal = breite.getDezimal();
*
* </pre>
* final double breiteDezimal = breite.getDezimal();</pre>
*
* <p>Instanzen von {@link Geo} werden im Standard wie folgt ausgegeben:</p>
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre>final Geo stuttartBreite = new Geo(48.782222);
*System.out.println(stuttartBreite);</pre>
* </td>
* <td>48° 46´ 56´´</td>
* <td>(48°,46´,56´´)</td>
* </tr>
* </table>
*
......@@ -64,9 +74,13 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> ...
* Geo.nutzeDezimalStandard(true);
* Geo.nutzeDezimalDarstellung(true);
* System.out.println(stuttartBreite);</pre>
* </td>
* <td>48.782222</td>
......@@ -77,7 +91,7 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
* <h3>Hinweis:</h3>
*
* <p>Nutzen Sie {@link java.text.DecimalFormat} und verwenden Sie
* {@link java.text.DecimalFormat#setMaximumIntegerDigits(int)} und
* {@link java.text.DecimalFormat#setMaximumIntegerDigits(int)} sowie
* {@link java.text.DecimalFormat#setMaximumFractionDigits(int)}.</p>
* </section>
*
......@@ -85,6 +99,10 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo
* g1 = new Geo(33, 53, 19),
......@@ -105,6 +123,10 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo
* stuttartBreite = new Geo(48, 46, 56),
......@@ -126,9 +148,9 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
* <td>
* <pre> Breitengrade Stuttgart, Beirut und Atlanta
* aufsteigend sortiert:
* 41° 53´ 30´´
* 48° 46´ 56´´
* 51° 28´ 38´´</pre>
* (33°,44´,56´´)
* (33°,53´,19´´)
* (48°,46´,56´´)</pre>
* </td>
* </tr>
* </table>
......@@ -145,6 +167,10 @@ package de.hdm_stuttgart.mi.sd1.aufgabe2;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Fehlermeldung Compiler</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo g = new Geo(22);
* g.sekunden = 44;</pre>
......
package de.hdm_stuttgart.mi.sd1.test.aufgabe2;
import de.hdm_stuttgart.mi.exam.unitmarking.ExaminationTestDefaults;
import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
import de.hdm_stuttgart.mi.sd1.aufgabe2.Geo;
import de.hdm_stuttgart.mi.sd1.test.ignore_me.P;
......@@ -9,19 +10,15 @@ import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import de.hdm_stuttgart.mi.exam.unitmarking.ExaminationTestDefaults;
import java.lang.reflect.Modifier;
import java.util.Arrays;
/**
* .
* Testing {@link Geo}.
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Test_Geo extends ExaminationTestDefaults {
@Test @Marking(points = 4)
public void test_100_constructGradMinuteSekunde() {
......@@ -57,16 +54,18 @@ public class Test_Geo extends ExaminationTestDefaults {
public void test_400_displayDefault() {
final Wrapper<Geo> atlantaBreite = new Wrapper<>(Geo.class, P.n(33), P.n(44), P.n(56));
Assert.assertEquals("(33°,44´,56´´)", atlantaBreite.invokeObject("toString"));
Assert.assertEquals("33° 44´ 56´´", atlantaBreite.invokeObject("toString"));
final Wrapper<Geo> stuttgartBreite = new Wrapper<>(Geo.class, P.n(48), P.n(46), P.n(56));
Assert.assertEquals("(48°,46´,56´´)", stuttgartBreite.invokeObject("toString"));
}
@Test
public void test_420_displayDezimal() {
final Wrapper<Geo> beirutBreite = new Wrapper<>(Geo.class, P.n(33), P.n(53), P.n(19));
beirutBreite.invokeObject("nutzeDezimalStandard", P.n(true));
Assert.assertEquals("(33°,53´,19´´)", beirutBreite.invokeObject("toString"));
beirutBreite.invokeObject("nutzeDezimalDarstellung", P.n(true));
Assert.assertEquals("33.888611", beirutBreite.invokeObject("toString"));
}
......@@ -77,13 +76,13 @@ public class Test_Geo extends ExaminationTestDefaults {
g2 = new Wrapper<>(Geo.class, P.n(30), P.n(20), P.n(10)).getInstance(),
g3 = new Wrapper<>(Geo.class, P.n(10), P.n(20), P.n(30)).getInstance();
Assert.assertFalse(g1.equals(g2));
Assert.assertTrue(g1.equals(g3));
Assert.assertFalse(g2.equals(g3));
Assert.assertNotEquals(g1, g2);
Assert.assertEquals(g1, g3);
Assert.assertNotEquals(g2, g3);
Assert.assertFalse(g2.equals(g1));
Assert.assertTrue(g3.equals(g1));
Assert.assertFalse(g3.equals(g2));
Assert.assertNotEquals(g2, g1);
Assert.assertEquals(g3, g1);
Assert.assertNotEquals(g3, g2);
}
@Test
......@@ -113,16 +112,16 @@ public class Test_Geo extends ExaminationTestDefaults {
Arrays.sort(orte);
Assert.assertTrue(ort3 == orte[0]);
Assert.assertTrue(ort4 == orte[1]);
Assert.assertTrue(ort2 == orte[2]);
Assert.assertTrue(ort1 == orte[3]);
Assert.assertSame(ort3, orte[0]);
Assert.assertSame(ort4, orte[1]);
Assert.assertSame(ort2, orte[2]);
Assert.assertSame(ort1, orte[3]);
}
@Test @Marking(points = 2)
public void test_700_immutable() {
final Class geoClass = Geo.class;
final Class<Geo> geoClass = Geo.class;
Wrapper.assertFinal(geoClass, "grad");
Wrapper.assertFinal(geoClass, "minuten");
......
package de.hdm_stuttgart.mi.sd1.aufgabe2;
import java.text.DecimalFormat;
/**
* Umrechnung zweier verschiedener Darstellungen von Breitenangaben.
* Darstellungen von Breitenangaben entweder als (Grad, Minuten, Sekunden) oder dezimal.
*
* <p>Längen- oder Breitenangaben können in Grad, Winkelminuten und Winkelsekunden angegeben werden. Dabei gilt:</p>
* <p>Längen- oder Breitenangaben können als (Grad, Winkelminuten, Winkelsekunden) dargestellt werden. Dabei gilt:</p>
*
* <ul>
* <li>360° Grad entsprechen dem Vollkreis.</li>
* <li>60 Winkelminuten ergeben 1 Grad: 60´ == 1°.</li>
* <li>60 Winkelsekunden ergeben eine Winkelminute: 60´´ = 1´.</li>
* </ul>
* <table class="goikTableDefaults">
* <tr>
* <td style="width: 35em">
* <ul>
* <li>360° Grad entsprechen einem Vollkreis.</li>
* <li>60 Winkelminuten ergeben 1 Grad: 60´ == 1°.</li>
* <li>60 Winkelsekunden ergeben eine Winkelminute: 60´´ = 1´.</li>
* </ul>
* </td>
* <td style="width: 30em"><b>Beispiel:</b> Die geographische Breitenangabe von Stuttgart lautet
* (<b style="color: red;">48°</b>,<b style="color: green;">46′</b>,<b style="color: blue;">56″</b>). Die Angabe
* »Nord« wird in dieser Aufgabe ignoriert.</td>
* </tr>
* </table>
*
* <p>Beispiel: Die geographische Breitenangabe von Stuttgart lautet <b style="color: red;">48°</b>
* <b style="color: green;">46′</b> <b style="color: blue;">56″</b> (Nord, wird in dieser Aufgabe ignoriert).</p>
* <p></p>
*
* <p>Alternativ gibt es auch eine dezimale Graddarstellung: Diese geht ebenfalls von einem Vollkreis zu 360° aus.
* Allerdings werden die Minuten- und Sekundenanteile als Dezimalbruch angegeben. Die geographische Breite
* <b style="color: red;">48°</b> <b style="color: green;">46′</b> <b style="color: blue;">56″</b> von Stuttgart
* beispielsweise ergibt sich in dieser Darstellung zu:</p>
* <p>Alternativ gibt es auch eine <em>dezimale</em> Graddarstellung: Diese geht ebenfalls von einem Vollkreis zu 360°
* aus. Allerdings werden die Minuten- und Sekundenanteile als Dezimalbruch angegeben. Die geographische Breite
* (<b style="color: red;">48°</b>, <b style="color: green;">46′</b>, <b style="color: blue;">56″</b>) beispielsweise
* von Stuttgart ergibt sich in dieser Darstellung zu:</p>
*
* \[\color{red}{48} + {\color{green}{46}\over 60} + {\color{blue}{56} \over {60 \times 60}} = 48.782222\dots \]
*
* <p>Instanzen von {@link Geo} können aus beiden Darstellungen erzeugt werden:</p>
*
* <pre>final Geo stuttartBreite1 = new Geo(48, 46, 56),
* stuttartBreite2 = new Geo(48.782222); // Identische Breite bis auf Rundungsfehler</pre>
* <pre>final Geo stuttartBreite1 = new Geo(<b style="color: red;">48°</b>, <b style="color: green;">46′</b>,<b style="color: blue;">56″</b>), // Grad, Minuten, Sekunden
* stuttartBreite2 = new Geo(48.782222); // Dezimalangabe: Identische Breite bis auf Rundungsfehler</pre>
*
* <p>Eine Instanz von {@link Geo} stellt beide Darstellungen bereit:</p>
* <p>Jede Instanz von {@link Geo} stellt beide Darstellungen bereit:</p>
*
* <pre>final Geo breite = ... ;
* <pre>final Geo breite = ... ;
*
* final int grad = breite.grad,
* minuten = breite.minuten,
* sekunden = breite.sekunden;
*
* final double breiteDezimal = breite.getDezimal();
*
* </pre>
* final double breiteDezimal = breite.getDezimal();</pre>
*
* <p>Instanzen von {@link Geo} werden im Standard wie folgt ausgegeben:</p>
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre>final Geo stuttartBreite = new Geo(48.782222);
*System.out.println(stuttartBreite);</pre>
* </td>
* <td>48° 46´ 56´´</td>
* <td>(48°,46´,56´´)</td>
* </tr>
* </table>
*
......@@ -56,9 +67,13 @@ import java.text.DecimalFormat;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> ...
* Geo.nutzeDezimalStandard(true);
* Geo.nutzeDezimalDarstellung(true);
* System.out.println(stuttartBreite);</pre>
* </td>
* <td>48.782222</td>
......@@ -69,6 +84,10 @@ import java.text.DecimalFormat;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo
* g1 = new Geo(33, 53, 19),
......@@ -89,6 +108,10 @@ import java.text.DecimalFormat;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Ausgabe</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo
* stuttartBreite = new Geo(48, 46, 56),
......@@ -110,9 +133,9 @@ import java.text.DecimalFormat;
* <td>
* <pre> Breitengrade Stuttgart, Beirut und Atlanta
* aufsteigend sortiert:
* 41° 53´ 30´´
* 48° 46´ 56´´
* 51° 28´ 38´´</pre>
* (33°,44´,56´´)
* (33°,53´,19´´)
* (48°,46´,56´´)</pre>
* </td>
* </tr>
* </table>
......@@ -122,11 +145,15 @@ import java.text.DecimalFormat;
*
* <table class="goikTableDefaults">
* <tr>
* <th>Code</th>
* <th>Fehlermeldung Compiler</th>
* </tr>
* <tr>
* <td>
* <pre> final Geo g = new Geo(22);
* g.sekunden = 44;</pre>
* </td>
* <td>Cannot assign a value to final variable 'sekunden'</td>
* <td style="color: red;">Cannot assign a value to final variable 'sekunden'</td>
* </tr>
* </table>
*
......@@ -139,16 +166,16 @@ public class Geo implements Comparable<Geo> {
df.setMinimumFractionDigits(6);
}
static boolean nutzeDezimal = false;
static private boolean nutzeDezimalDarstellung = false;
/**
* Die {@link #toString()} erzeugt im Standard einen String der Form »48° 23' 11''«. Alternativ
* kann auch die dezimale Graddarstellung der Art »48.78222222...« als Default festgelegt werden.
* @param nutzeDezimalDefault Für true erzeugt {@link #toString()} die Darstellung »48°,23',11''«,
* ansonsten »48.78222222...«.
* @param nutzeDezimalDarstellung Für true erzeugt {@link #toString()} die Darstellung »48.78222222...«,
* ansonsten »48°,23',11''«.
*/
public static void nutzeDezimalStandard(final boolean nutzeDezimalDefault) {
nutzeDezimal = nutzeDezimalDefault;
public static void nutzeDezimalDarstellung(final boolean nutzeDezimalDarstellung) {
Geo.nutzeDezimalDarstellung = nutzeDezimalDarstellung;
}
/**
......@@ -204,10 +231,10 @@ public class Geo implements Comparable<Geo> {
@Override
public String toString() {
if (nutzeDezimal) {
if (nutzeDezimalDarstellung) {
return df.format(getDezimal());
} else {
return grad + "° " + minuten + "´ " + sekunden + "´´";
return "(" + grad + "°," + minuten + "´," + sekunden + "´´)";
}
}
......
package de.hdm_stuttgart.mi.sd1.aufgabe2;
import de.hdm_stuttgart.mi.sd1.aufgabe2.Geo;
import java.util.Arrays;
/**
......@@ -53,7 +51,7 @@ public class GeoUsageSample {
System.out.println("\nStandarddarstellung Breite Stuttgart:" + stuttartBreite);
// Nutze Dezimaldarstellung auf 6 Nachkommastellen
Geo.nutzeDezimalStandard(true);
Geo.nutzeDezimalDarstellung(true);
System.out.println("Dezimaldarstellung Breite Stuttgart:" + stuttartBreite);
}
}
......@@ -11,17 +11,15 @@ import org.junit.runners.MethodSorters;
import de.hdm_stuttgart.mi.exam.unitmarking.ExaminationTestDefaults;
import java.lang.reflect.Modifier;
import java.util.Arrays;
/**
* .
* Testing {@link Geo}.
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Test_Geo extends ExaminationTestDefaults {
@Test @Marking(points = 4)
public void test_100_constructGradMinuteSekunde() {
......@@ -57,16 +55,18 @@ public class Test_Geo extends ExaminationTestDefaults {
public void test_400_displayDefault() {
final Wrapper<Geo> atlantaBreite = new Wrapper<>(Geo.class, P.n(33), P.n(44), P.n(56));
Assert.assertEquals("(33°,44´,56´´)", atlantaBreite.invokeObject("toString"));
Assert.assertEquals("33° 44´ 56´´", atlantaBreite.invokeObject("toString"));
final Wrapper<Geo> stuttgartBreite = new Wrapper<>(Geo.class, P.n(48), P.n(46), P.n(56));
Assert.assertEquals("(48°,46´,56´´)", stuttgartBreite.invokeObject("toString"));
}
@Test
public void test_420_displayDezimal() {
final Wrapper<Geo> beirutBreite = new Wrapper<>(Geo.class, P.n(33), P.n(53), P.n(19));
beirutBreite.invokeObject("nutzeDezimalStandard", P.n(true));
Assert.assertEquals("(33°,53´,19´´)", beirutBreite.invokeObject("toString"));
beirutBreite.invokeObject("nutzeDezimalDarstellung", P.n(true));
Assert.assertEquals("33.888611", beirutBreite.invokeObject("toString"));
}
......@@ -77,13 +77,13 @@ public class Test_Geo extends ExaminationTestDefaults {
g2 = new Wrapper<>(Geo.class, P.n(30), P.n(20), P.n(10)).getInstance(),
g3 = new Wrapper<>(Geo.class, P.n(10), P.n(20), P.n(30)).getInstance();
Assert.assertFalse(g1.equals(g2));
Assert.assertTrue(g1.equals(g3));
Assert.assertFalse(g2.equals(g3));
Assert.assertNotEquals(g1, g2);
Assert.assertEquals(g1, g3);
Assert.assertNotEquals(g2, g3);
Assert.assertFalse(g2.equals(g1));
Assert.assertTrue(g3.equals(g1));
Assert.assertFalse(g3.equals(g2));
Assert.assertNotEquals(g2, g1);
Assert.assertEquals(g3, g1);
Assert.assertNotEquals(g3, g2);
}
@Test
......@@ -113,16 +113,16 @@ public class Test_Geo extends ExaminationTestDefaults {
Arrays.sort(orte);
Assert.assertTrue(ort3 == orte[0]);
Assert.assertTrue(ort4 == orte[1]);
Assert.assertTrue(ort2 == orte[2]);
Assert.assertTrue(ort1 == orte[3]);
Assert.assertSame(ort3, orte[0]);
Assert.assertSame(ort4, orte[1]);
Assert.assertSame(ort2, orte[2]);
Assert.assertSame(ort1, orte[3]);
}
@Test @Marking(points = 2)
public void test_700_immutable() {
final Class geoClass = Geo.class;
final Class<Geo> geoClass = Geo.class;
Wrapper.assertFinal(geoClass, "grad");
Wrapper.assertFinal(geoClass, "minuten");
......
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