|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object ArraySum Loesung31c
public class Loesung31c
Loesungsvorschlaege fuer Aufgabe 3-1c.
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.
Field Summary |
---|
Fields inherited from class ArraySum |
---|
ARRAY |
Constructor Summary | |
---|---|
Loesung31c()
|
Method Summary | |
---|---|
static int |
alternatingSumException(int[] array)
Deprecated. Effective Java Item 39: Use exceptions only for exceptional conditions. Diese Art, eine Schleife zu verwenden, ist zwar dem Problem angemessen, aber schwer verstaendlich und dazu noch sehr langsam in der Ausfuehrung. Sie sollte daher nie verwendet werden. |
static int |
alternatingSumModulo(int[] array)
Loesungsvorschlag fuer Aufgabe 3-1c mit Anwendung einer Modulo-Formel. |
static int |
alternatingSumRecursion(int[] array,
int index)
Rekursiver Loesungsvorschlag fuer Aufgabe 3-1c. |
static int |
alternatingSumToggle(int[] array)
Loesungsvorschlag fuer Aufgabe 3-1c mit Toggle (Umschalten). |
static void |
main(String[] args)
Treiber fuer Aufruf von der Kommandozeilenschnittstelle. |
Methods inherited from class ArraySum |
---|
printArray |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public Loesung31c()
Method Detail |
---|
public static 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
public static 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
public static 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
public static int alternatingSumException(int[] array)
Berechnet die "alternierende Summe" aller Elemente eines Arrays. Dazu werden bei jedem Iterationsschritt zwei Array-Elemente als Additions-Subtraktions-Paar gemeinsam behandelt. Anstelle einer Abbruchbedingung wird auf das Auftreten einer Ausnahme beim Array-Ueberlauf gewartet.
array
- das aufzusummierende Array
array
NullPointerException
- falls array == null
public static void main(String[] args)
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |