/************************
 * Examples of booleans, the "if" conditional, and the "while" loop.
 * This material is chapter 4 in our text.
 *
 * These new constructs give us *lots* more power; 
 * please look carefully at the code.
 *
 * Things to discuss:
 *   - "static" methods, and what it means to say that
 *   - "public" vs "private" methods
 *   - method definitions, calling the method, and their
 *     inputs (i.e. variables passed in) and output (i.e. return value)
 *
 *
 * @author  Jim mahoney
 * @version Oct 8
 ************************/

class BooleanExamples {

    public static void main(String[] args){
        testDeMorgan();
    }

    // Loop through all four true/false combinations of two
    // boolean variables, and use each to try de Morgan's Laws.
    public static void testDeMorgan(){
        final int numberOfCases=4;
        line();
        print("Testing de Morgan's Laws.");
        line();
        boolean a=true;
        boolean b=true;
        int howManyTrue  = 0;
        int whichCase=1;
        while (whichCase <= numberOfCases){
            if      (1==whichCase){ 
                a=true;  b=true;
            }
            else if (2==whichCase){
                a=true;  b=false;
            }
            else if (3==whichCase){
                a=false; b=true;
            }
            else if (4==whichCase){
                a=false; b=false;
            }
            else {
                print(" OOPS - illegal whichCase");
                System.exit(1); // exit the program with an error status.
            }
            boolean answer = tryOneDeMorganPair(a,b);
            if (answer) {
                howManyTrue++;
            }
            whichCase++;
        }
        print(" Summary: de Morgan is true " + howManyTrue +
              " times out of " + numberOfCases + ".");
    }

    // Print out an analysis of a specific true/false combination
    // in the symbolic logic truism called "de Morgan's Law".  (See pg 135.)
    public static boolean tryOneDeMorganPair(boolean x, boolean y){
        print(" Trying x='" + x + "', y='" + y + "' on deMorgan.");
        boolean leftSide   = !(x && y);
        boolean rightSide  = !x || !y;
        boolean wholeThing = (leftSide == rightSide);
        print("   Left  side : !(x && y) = " + leftSide  + ".");
        print("   Right side : !x || !y  = " + rightSide + ".");
        print("   (Left == Right) is " + wholeThing + ".");
        line();
        return wholeThing;
    }

    // Print a line of dashes, i.e. " - - - - - - - - - "
    public static void line(){
        int iDashCount=20;
        System.out.print(">");
        while (iDashCount>0){
            System.out.print(" -");
            iDashCount--;
        }
        System.out.println(" ");
    }

    // I get tired of typing "System.out.println".
    // So this lets me just type "print".
    public static void print(String s){
        System.out.println("> "+s);
    }


}


syntax highlighted by Code2HTML, v. 0.9.1