1. Text Processing
    1. The char Type
      1. 'c'
      2. 2byte, Unicode
      3. really integers
      4. ==,<,>
    2. Cumulative Text Algorithms
      1. static methods
        1. Charactor
    3. System.out.printf
      1. 'f' formatted
        1. %
  2. Methods with Conditional Execution
    1. Precondition
    2. Postconditions
    3. Throwing Exceptions
      1. exceptions are objects
      2. create new exception object and then throw it
      3. if(n<0) {throw new IllegalArgumentException();}
      4. when thrown, it halts the execution of the method
    4. Reasoning about path
  3. case study
    1. main method: short; structure
    2. Good structure
      1. Each method should have coherent set of responsibilities
        1. method can be described in one sentence
      2. No one method should do too large a share of the overall task
      3. coupling and dependencies between methods should be minimized
      4. The main method should be a concise summary of overall prog
        1. less chaining
      5. Data should be "owned" at the lowest level possible
        1. main should not have too much println
        2. if data need to pass down to some level, it should be defined in a lower level
  4. Cumulative Algorithms
    1. Cumulative Sum
      1. sum=sum+next;
    2. Min/Max Loops
      1. initialize;
      2. for(){if(min>next) or if(max<next)}
    3. Cumulative Sum with if
      1. Consider special cases
    4. Roundoff Errors
      1. Compare doubles:Math.abs(a-b)<0.001
  5. if/else Statement
    1. Relational Operators
    2. if/else options
      1. sequential ifs
      2. nested ifs ending in test
      3. nested ifs ending in else
    3. Equality
      1. Primitive data: ==/!=
      2. Objects: .equals(); equalsIgnoreCase()
    4. Multiple Conditions
      1. logical AND &&
      2. logical OR ||