/*
Datei............: Aufg0410.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 18.10.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 04.10
Kommentare.......:

Bei der Short-Circuit-Evaluation wird in einem Ausdruck mit
einem der logischen Operatoren && oder || nur der jeweils
erste Oparand ausgewertet, wenn nach seiner Auswertung das
Ergebnis des kompletten Ausdrucks bereits klar ist. Dies
ist bei && der Fall, wenn der erste Operand false ist, denn
dann ist (unabhängig vom Ergebnis des zweiten Operators)
der komplette Ausdruck false. Dasselbe gilt beim ||-Operator,
denn wenn bereits der erste Operand true ist, dann ist der
komplette Ausdruck in jedem Fall true.

Die Short-Circuit-Evaluation wurde nicht immer verwendet.
In Pascal oder Basic beispielsweise wurde die Entscheidung
darüber den Compilerbauern überlassen. Bei fast allen
moderneren Hochsprachen ist die Short-Circuit-Evaluation
dagegen Standard (C, C++, Modula-2, Java). Einige Sprachen
erlauben sogar, wahlweise mit oder ohne Short-Circuit-Evaluation
zu arbeiten (Java, ADA).

Daß die Short-Circuit-Evaluation Programme oftmals vereinfachen
kann, zeigt das folgende Beispiel. In der Methode SCETest wird
die Short-Circuit-Evaluation angewendet und das Programm arbeitet
ordnungsgemöß. In der Methode NonSCETest wird sie dagegen
nicht verwendet (durch den Einsatz des &-Operators anstelle des
&&-Operators) und das - ansonsten identische - Programm stürzt
mit einer ArrayIndexOutOfBoundsException ab. 

Es sei dem Leser überlassen, den genauen Grund dafür
herauszufinden. Diese Art von Programmierstil ist auf jeden
Fall nicht ungewöhnlich und kommt (insbesondere bei der
Bearbeitung von Dateien, Arrays, Listen, etc.) des öfteren
vor.
*/
public class Aufg0410
{
  public static void main(String args[])
  {
    SCETest();
    NonSCETest();
  }

  static void SCETest()
  {
    int arTest[] = new int[10];

    if (arTest.length > 20 && arTest[20] == 5) {
      System.out.println("arTest[20] ist 5");
    }
  }

  static void NonSCETest()
  {
    int arTest[] = new int[10];

    if (arTest.length > 20 & arTest[20] == 5) {
      System.out.println("arTest[20] ist 5");
    }
  }
}


