C OMP 110 C ONDITIONALS Instructor: Jason Carter.

25
COMP 110 CONDITIONALS Instructor: Jason Carter
  • date post

    19-Dec-2015
  • Category

    Documents

  • view

    218
  • download

    5

Transcript of C OMP 110 C ONDITIONALS Instructor: Jason Carter.

Page 1: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

COMP 110CONDITIONALS

Instructor: Jason Carter

Page 2: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

2

MORE ON CONDITIONALS

Miscellaneous (Side effects) Style issues Early returns

Page 3: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

3

FOUR KINDS OF METHODS

public void setWeight (double newVal) { weight = newVal;}

public static double calculatBMI(double weight, double height) {

return weight/(height*height);}

public int getWeight() { return weight;}

public static int readNextNumber() { System.out.println(”Next Number:"); return Keyboard.readInt();}

procedure

functionpure function

setWeight(70);

calculateBMI(70, 1.77)

calculateBMI(70, 1.77)

24.57

24.57

getWeight() 70setWeight(77) getWeight() 77

impure function

getWeight() 77

541

readNextNumber ()

5readNextNumber ()

4

impure function with side effects

Page 4: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

4

SIDE EFFECTS

public int getWeight() { System.out.println(“get Weight called” ); return weight; }

public static int readNextNumber() { System.out.println(”Next Number:"); return new Keyboard.readInt();}

public int increment() { counter++; return counter; }

Effect other than computing the return value

Printing something

Reading input

Changing global variable

Page 5: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

5

ALTERNATIVE TO CHANGING A GLOBAL VARIABLE

public int increment() { counter++; return counter; }

public void incrementCounter() { counter++; }

public int getCounter() { return counter; }

Page 6: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

6

IF-ELSE VS. BOOLEAN EXPRESSIONS

public static boolean hasFailed(int score) {if (score < PASS_CUTOFF)

return true;else

return false;}

Page 7: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

7

IF-ELSE STYLE

public static boolean hasFailed(int score) {return score < PASS_CUTOFF;

}

Page 8: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

8

IF-ELSE: REDUNDANT TEST

public static char toLetterGrade (int score) {if ((score >= A_CUTOFF == true)

return 'A';else if (score >= B_CUTOFF == true)

return 'B';else if (score >= C_CUTOFF == true)

return 'C';else if (score >= D_CUTOFF == true)

return 'D';else

return 'F';}

Page 9: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

9

NESTED IF-ELSE

public static char toLetterGrade (int score)if ((score >= A_CUTOFF)

return 'A';else if (score >= B_CUTOFF)

return 'B';else if (score >= C_CUTOFF)

return 'C';else if (score >= D_CUTOFF)

return 'D';else

return 'F';}

Page 10: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

10

ELSE BRANCHING

Page 11: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

11

THEN BRANCHING

Page 12: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

12

THEN BRANCHING

public static char toLetterGrade (int score)if (score >= D_CUTOFF)

if (score >= C_CUTOFF)if (score >= B_CUTOFF)

if (score >= A_CUTOFF)return 'A‘;

elsereturn 'B';

else // score < B_CUTOFFreturn 'C‘;

else // score < C_CUTOFFreturn 'D';

else // score < D_CUTOFFreturn 'F';

}

}

Page 13: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

13

BALANCED BRANCHING

Page 14: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

14

BALANCED BRANCHING

public static char toLetterGrade (int score) {if (score >= B_CUTOFF)

if (score >= A_CUTOFF) return 'A'; else

return 'B';else // score < B_CUTOFF

if (score < C_CUTOFF)if (score < D_CUTOFF)

return 'F';else

return 'D'; else // score >= C_CUTOFF

return 'C';}

Page 15: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

15

NESTED IF-ELSE STYLE

Linear branching preferable to balanced branches

Else branching preferable to then branching

Page 16: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

16

NO NESTING

public static char toLetterGrade (int score) {char result;if (score >= A_CUTOFF)

result = 'A';if ((score < A_CUTOFF) && (score >= B_CUTOFF))

result = 'B';if ((score < B_CUTOFF) && (score >= C_CUTOFF))

result = 'C';if ((score < C_CUTOFF) && (score >= D_CUTOFF))

result = 'D';if (score < D_CUTOFF)

result = F';return result;

}

Page 17: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

17

WHEN ELSE BRANCH IS NEEDED

public static char toLetterGrade (int score) {char result;if (score >= A_CUTOFF)

result = 'A';else if (score >= B_CUTOFF)

result = 'B';else if (score >= C_CUTOFF)

result = 'C';else if (score >= D_CUTOFF)

result = 'D';else

result = F';return result;

}

Page 18: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

18

NO NESTING WITH EARLY RETURNS

public static char toLetterGrade (int score) {char result;if (score >= A_CUTOFF)

return 'A';else if (score >= B_CUTOFF)

return 'B';else if (score >= C_CUTOFF)

return 'C';else if (score >= D_CUTOFF)

return 'D';return F';

}

Page 19: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

19

EQUIVALENT SOLUTION

public static char toLetterGrade (int score) {if (score >= A_CUTOFF)

return 'A';else if (score >= B_CUTOFF)

return 'B';else if (score >= C_CUTOFF)

return 'C';else if (score >= D_CUTOFF)

return 'D';else

return F';}

Page 20: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

20

EARLY RETURNS IN PROCEDURES

public void printLetterGrade(int score) { if (score < 0) {

System.out.println ("Illegal score");return;

} System.out.println(“Letter Grade:” + toLetterGrade(score”));

}

Page 21: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

21

WITHOUT EARLY RETURN IN PROCEDURES

public void printLetterGrade(int score) { if (score < 0)

System.out.println ("Illegal score");else

System.out.println ("Letter Grade: ” + toLetterGrade(score));

}

Page 22: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

22

DANGLING ELSE

if (score >= B_CUTOFF)if (score >= A_CUTOFF)

System.out.println ("excellent!");else

System.out.println ("bad");}

Matching if?

Page 23: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

23

DANGLING ELSE: MATCHING OUTERMOST IF

if (score >= B_CUTOFF)if (score >= A_CUTOFF)

System.out.println ("excellent!");else

System.out.println ("bad");

Page 24: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

24

DANGLING ELSE: MATCHING INNERMOST IF

if (score >= B_CUTOFF)if (score >= A_CUTOFF)

System.out.println ("excellent!");else

System.out.println ("bad");

Correct interpretation

Page 25: C OMP 110 C ONDITIONALS Instructor: Jason Carter.

25

NESTED IF-ELSE STYLE REMINDER

Linear Branching preferable to Balanced Branches

Else Branching Preferable to Then Branching Do not have dangling-else ambiguity