Java-API--Dokumentation

Class LoesungE4

java.lang.Object
  extended by LoesungE4

 class LoesungE4
extends Object

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.)

Version:
$Revision: 1.1 $
Author:
Arne Johannessen
See Also:
Effective Java, Java Puzzlers, Aufgabenblatt 4

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

LoesungE4()
Method Detail

alternatingSumModulo

int alternatingSumModulo(int[] array)
Loesungsvorschlag fuer Aufgabe E-4 mit Anwendung einer Modulo-Formel.

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.

Parameters:
array - das aufzusummierende Array
Returns:
die alternierende Summe von array
Throws:
NullPointerException - falls array == null

alternatingSumToggle

int alternatingSumToggle(int[] array)
Loesungsvorschlag fuer Aufgabe E-4 mit Toggle (Umschalten).

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.

Parameters:
array - das aufzusummierende Array
Returns:
die alternierende Summe von array
Throws:
NullPointerException - falls array == null

alternatingSumRecursion

int alternatingSumRecursion(int[] array,
                            int index)
Rekursiver Loesungsvorschlag fuer Aufgabe E-4. Berechnet rekursiv die "alternierende Summe" aller Elemente eines Arrays von einem bestimmten Element an.

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.

Parameters:
array - das aufzusummierende Array
index - der Index des ersten aufzusummierenden Elementsersten
Returns:
die alternierende Summe aller Elemente von array ab index; 0, falls index >= array.length
Throws:
NullPointerException - falls array == null

Java-API--Dokumentation

Gehe zurueck zur Tutoriums-Homepage