25
COMP 110 CONDITIONALS Instructor: Jason Carter

Comp 110 Conditionals

  • Upload
    dougal

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Comp 110 Conditionals. Instructor: Jason Carter. More on Conditionals. Miscellaneous (Side effects) Style issues Early returns. Four Kinds of Methods. procedure. public void setWeight (double newVal) { weight = newVal; }. setWeight (70);. . function. pure function. - PowerPoint PPT Presentation

Citation preview

Page 1: Comp 110 Conditionals

COMP 110CONDITIONALS

Instructor: Jason Carter

Page 2: Comp 110 Conditionals

2

MORE ON CONDITIONALS Miscellaneous (Side effects) Style issues Early returns

Page 3: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

5

ALTERNATIVE TO CHANGING A GLOBAL VARIABLE

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

public void incrementCounter() { counter++; }

public int getCounter() { return counter; }

Page 6: Comp 110 Conditionals

6

IF-ELSE VS. BOOLEAN EXPRESSIONS

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

return true;else

return false;}

Page 7: Comp 110 Conditionals

7

IF-ELSE STYLE

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

}

Page 8: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

10

ELSE BRANCHING

Page 11: Comp 110 Conditionals

11

THEN BRANCHING

Page 12: Comp 110 Conditionals

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: Comp 110 Conditionals

13

BALANCED BRANCHING

Page 14: Comp 110 Conditionals

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: Comp 110 Conditionals

15

NESTED IF-ELSE STYLE Linear branching preferable to balanced

branches Else branching preferable to then branching

Page 16: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

22

DANGLING ELSE

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

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

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

Matching if?

Page 23: Comp 110 Conditionals

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: Comp 110 Conditionals

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: Comp 110 Conditionals

25

NESTED IF-ELSE STYLE REMINDER Linear Branching preferable to Balanced

Branches Else Branching Preferable to Then Branching

Do not have dangling-else ambiguity