Skip to content
Snippets Groups Projects
Commit cded429c authored by Goik Martin's avatar Goik Martin
Browse files

for --> while exercise

parent fb4bb093
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body><h1>Inhalt</h1><p>Umwandlung einer <code>for(...){...}</code> in eine
<code>while(...){...}</code> oder eine <code>do {...} while (...)</code>
Schleife.</p><h1>Beschreibung</h1><p>Wir betrachten folgende
Klassenmethode:</p> <pre>/**
* Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
*
* Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
* von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
*
* @param ausgangsKapital
* @param gewuenschtesEndkapital Dieser Wert muss größer als das Ausgangskapital sein.
* @param zinsatzJaehrlich Die jährliche Verzinsung, z.B. 2.5%
* @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
*
*/
static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinsatzJaehrlich) {
final double zinsfaktor = (1 + zinsatzJaehrlich / 100);
int jahr = 0;
for (; ausgangsKapital &lt; gewuenschtesEndkapital; ausgangsKapital *= zinsfaktor) {
jahr++;
}
return jahr;
}</pre><h1>Aufgabe</h1><p>Sie sollen die <code>for(...)</code> ersetzen.
Mögliche Alternativen sind:</p><ul>
<li><code>while(...){...}</code></li>
<li><code>do {...} while(...)</code></li>
</ul><p>Entscheiden Sie zunächst, welche dieser beiden Alternativen
sinnvoller ist und <strong>begründen Sie diese Entscheidung</strong> in
einem Java Kommentar Ihrer Implementierung. Diese Begründung ergibt bereits
Punkte.</p><p>Ersetzen Sie dann in obigem Code die
<code>for(...){...}</code> Schleife entsprechend. Sie können dabei wie folgt
vorgehen:</p><ol>
<li>Starten Sie Ihre Eclipse Umgebung.</li>
<li>Legen Sie ein Projekt an. Erstellen Sie eine Klasse
<code>Zinseszins</code> mit einer <code>main(...)</code> Methode.</li>
<li>Kopieren Sie obige Methode <code>anzahlJahre(...)</code> in die
Klasse <code>Zinseszins</code> und duplizieren Sie diese unter dem Namen
<code>anzahlJahreOrig(...)</code>. Die Originalimplementierung bleibt
dadurch immer verfügbar.</li>
<li>Wandeln Sie die <code>for(...){...}</code> Schleife um. Sie können
die Methoden <code>anzahlJahreOrig(...)</code> und
<code>anzahlJahre(...)</code> testweise mit geeigneten Parametern
aufrufen, um die Korrektheit zu überprüfen.</li>
<li>Laden Sie die komplette Klasse <code>Zinseszins.java</code> als
Lösung in das Klausursystem hoch.</li>
</ol><p>Hinweis: Nicht übersetzbarer Code wird nicht bewertet.</p></body>
</html>
.project
.classpath
/.settings/
/target/
A1.log
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm-stuttgart.mi.sd1</groupId>
<artifactId>for2while</artifactId>
<version>0.9</version>
<packaging>jar</packaging>
<name>For2while</name>
<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration />
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>de.hdm_stuttgart.mi.sda1.catalog2sax.App</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package de.hdm_stuttgart.mi.sd1.for2while;
public class Compute {
/**
* @param args Unused
*/
public static void main(String[] args) {
double ausgangskapital = 1000,
gewuenschtesKapital = 1300,
jahresZins = 1.8 /* in Prozent*/;
System.out.format("Es braucht %d Jahre", anzahlJahre(ausgangskapital, gewuenschtesKapital, jahresZins));
}
/**
* Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
*
* Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
* von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
*
* @param ausgangsKapital
* @param gewuenschtesEndkapital Dieser Wert muss größer als das Ausgangskapital sein.
* @param zinssatzJaehrlich Die jährliche Verzinsung, z.B. 2.5%
* @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
*
*/
static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinssatzJaehrlich) {
final double zinsfaktor = (1 + zinssatzJaehrlich / 100);
int jahr = 0;
do {
jahr++;
ausgangsKapital *= zinsfaktor;
} while (ausgangsKapital < gewuenschtesEndkapital);
return jahr;
}
}
package de.hdm_stuttgart.mi.sd1.for2while;
public class Compute2 {
/**
* @param args Unused
*/
public static void main(String[] args) {
double ausgangskapital = 1000,
gewuenschtesKapital = 1300,
jahresZins = 1.8 /* in Prozent*/;
System.out.format("Es braucht %d Jahre", anzahlJahre(ausgangskapital, gewuenschtesKapital, jahresZins));
}
/**
* Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
*
* Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
* von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
*
* @param ausgangsKapital
* @param gewuenschtesEndkapital Dieser Wert muss größer als das Ausgangskapital sein.
* @param zinsatzJaehrlich Die jährliche Verzinsung, z.B. 2.5%
* @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
*
*/
static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinsatzJaehrlich) {
final double zinsfaktor = (1 + zinsatzJaehrlich / 100);
int jahr = 0;
for (; ausgangsKapital < gewuenschtesEndkapital; ausgangsKapital *= zinsfaktor) {
jahr++;
}
return jahr;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment