|
Java-API--Dokumentation | ||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object LoesungE4
class LoesungE4
Loesungsvorschlaege fuer Aufgabe E-4: Alternierende Summe.
Diese Klasse enthaelt vier verschiedene Beispiele fuer moegliche Loesungsansaetze. Traditionell ist die Toggle-Loesung die bevorzugte, weil sie in allen imperativen Programmiersprachen (von Assembler bis einschliesslich Java) sehr einfach zu implementieren ist. Diese Methode ist die beste Loesung fuer dieses Problem.
Waehrend die rekursive Loesung durch ihre unuebertroffene Einfachheit besticht, ist ihr praktischer Nutzen in Java eingeschraenkt (siehe Aufgabe 3-4). Der Ansatz mit Modulo-Formel ist vergleichsweise schwer verstaendlich und sollte daher nur Anwendung finden, wenn aus irgendeinem Grund die anderen Methoden nicht praktikabel sind. Beide Methoden sind langsamer als die Toggle-Loesung.
(Obwohl in objektorientierten Sprachen wie Java eine weitere Loesung mit Ausnahmenbehandlung moeglich ist, sollte sie niemals verwendet werden. Sie ist naemlich zwar einfach zu schreiben, aber schwer zu lesen; ausserdem ist er sehr langsam. Naeheres erklaert Josh Bloch in Effective Java auf Seite 169 ff.; vgl. Java Puzzlers Puzzle 42, S. 89.)
Constructor Summary | |
---|---|
LoesungE4()
|
Method Summary | |
---|---|
(package private) int |
alternatingSumModulo(int[] array)
Loesungsvorschlag fuer Aufgabe E-4 mit Anwendung einer Modulo-Formel. |
(package private) int |
alternatingSumRecursion(int[] array,
int index)
Rekursiver Loesungsvorschlag fuer Aufgabe E-4. |
(package private) int |
alternatingSumToggle(int[] array)
Loesungsvorschlag fuer Aufgabe E-4 mit Toggle (Umschalten). |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
LoesungE4()
Method Detail |
---|
int alternatingSumModulo(int[] array)
Berechnet die "alternierende Summe" aller Elemente eines Arrays. Dazu wird das jeweils richtige Vorzeichen fuer jedes Array-Element anhand einer Modulo-basierten Formel errechnet und dann mit jedem Summanden multipliziert.
array
- das aufzusummierende Array
array
NullPointerException
- falls array == null
int alternatingSumToggle(int[] array)
Berechnet die "alternierende Summe" aller Elemente eines Arrays. Dazu wird das jeweils richtige Vorzeichen in Form eines Boolean-Flags gespeichert und bei jeder Iteration umgeschaltet.
array
- das aufzusummierende Array
array
NullPointerException
- falls array == null
int alternatingSumRecursion(int[] array, int index)
Das durch index
angegebene Element wird addiert
und die durch die Rekursion gelieferte Summe des Rest-Arrays
subtrahiert. Durch das Prinzip der Invertierbarkeit ("minus und
minus gibt plus") ergibt sich direkt die alternierende Summe.
array
- das aufzusummierende Arrayindex
- der Index des ersten aufzusummierenden
Elementsersten
array
ab index
;
0
, falls index >= array.length
NullPointerException
- falls array == null
|
Java-API--Dokumentation | ||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |