C OMP 110 C ONDITIONALS Instructor: Jason Carter.
-
date post
19-Dec-2015 -
Category
Documents
-
view
218 -
download
5
Transcript of C OMP 110 C ONDITIONALS Instructor: Jason Carter.
COMP 110CONDITIONALS
Instructor: Jason Carter
2
MORE ON CONDITIONALS
Miscellaneous (Side effects) Style issues Early returns
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
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
5
ALTERNATIVE TO CHANGING A GLOBAL VARIABLE
public int increment() { counter++; return counter; }
public void incrementCounter() { counter++; }
public int getCounter() { return counter; }
6
IF-ELSE VS. BOOLEAN EXPRESSIONS
public static boolean hasFailed(int score) {if (score < PASS_CUTOFF)
return true;else
return false;}
7
IF-ELSE STYLE
public static boolean hasFailed(int score) {return score < PASS_CUTOFF;
}
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';}
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';}
10
ELSE BRANCHING
11
THEN BRANCHING
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';
}
}
13
BALANCED BRANCHING
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';}
15
NESTED IF-ELSE STYLE
Linear branching preferable to balanced branches
Else branching preferable to then branching
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;
}
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;
}
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';
}
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';}
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”));
}
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));
}
22
DANGLING ELSE
if (score >= B_CUTOFF)if (score >= A_CUTOFF)
System.out.println ("excellent!");else
System.out.println ("bad");}
Matching if?
23
DANGLING ELSE: MATCHING OUTERMOST IF
if (score >= B_CUTOFF)if (score >= A_CUTOFF)
System.out.println ("excellent!");else
System.out.println ("bad");
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
25
NESTED IF-ELSE STYLE REMINDER
Linear Branching preferable to Balanced Branches
Else Branching Preferable to Then Branching Do not have dangling-else ambiguity