![Page 1: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/1.jpg)
Decisions, decisions, decisions
![Page 2: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/2.jpg)
Background Our problem-solving solutions so far have the straight-line
property They execute the same statements for every run of the
program
public class DisplayForecast // main(): application entry point
public static void main(String[] args) { System.out.print("I think there is a world"); System.out.print(" market for maybe five "); System.out.println("computers. “); System.out.print(" Thomas Watson, IBM, “); System.out.println("1943.“);
}}
![Page 3: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/3.jpg)
Background For general problem solving we need more capabilities
The ability to control which statements are executed The ability to control how often a statement is executed
We will concentrate first on controlling which statements are executed
Java provides the if and switch conditional constructs to control whether a statement list is executed The if constructs use logical expressions to determine
their course of action
Examination begins with logical expressions
![Page 4: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/4.jpg)
Logical expressions The branch of mathematics dealing with logical expressions
is Boolean algebra Developed by the British mathematician George Boole
![Page 5: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/5.jpg)
Logical expressions A logical expression has either the value logical true or
logical false
Some expressions whose values are logical true The year 2004 is a leap year A meter equals 100 centimeters
Some expressions whose values are logical false A triangle has four sides The area of square is always equal to twice its
perimeter
![Page 6: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/6.jpg)
Logical expressions There are three primary logical operators for manipulating
logical values Logical and Logical or Logical not
The operators work as most of us would expect
![Page 7: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/7.jpg)
Truth tables We use truth tables to give formal specifications of the
operators “It works as most of us would expect” allows for
ambiguity of interpretation Jim is smiling or Patty is smiling
Can both Jim and Patty both be smiling? Truth tables
Lists all combinations of operand values and the result of the operation for each combination
p q p and q
False False FalseFalse True FalseTrue False FalseTrue True True
![Page 8: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/8.jpg)
Or and not truth tables
p q p or q
False False FalseFalse True TrueTrue False TrueTrue True True p not q
False TrueTrue False
![Page 9: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/9.jpg)
Boolean algebra Can create complex logical expressions by combining simple
logical expressions
not (p and q)
p q p and q not (p and q)
False False False TrueFalse True False TrueTrue False False TrueTrue True True False
![Page 10: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/10.jpg)
DeMorgan’s laws not (p and q) equals (not p) or (not q)
( not p) or p q p and q not (p and q) ( not p) (not q) ( not q)
False False False True True True TrueFalse True False True True False TrueTrue False False True False True TrueTrue True True False False False False
![Page 11: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/11.jpg)
DeMorgan’s laws not (p or q) equals (not p) and (not q)
( not p) and p q p or q not (p or q) ( not p) (not q) ( not q)
False False False True True True TrueFalse True False False True False FalseTrue False False False False True FalseTrue True True False False False False
![Page 12: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/12.jpg)
DeMorgan’s laws If you remember nothing else about the Boolean operators,
remember that:
!(a && b) == !a || !b !(a || b) == !a && !b
![Page 13: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/13.jpg)
Google’s latest recruitment campaign
![Page 14: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/14.jpg)
A boolean type Java has the logical type boolean
Type boolean has two literal constants true false
Operators The and operator is && The or operator is || The not operator is !
![Page 15: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/15.jpg)
Defining boolean variables Local boolean variables are uninitialized by default
boolean isWhitespace;boolean receivedAcknowledgement;boolean haveFoundMissingLink;
-isWhitespace
-receivedAcknowledgement
-haveFoundMissingLink
![Page 16: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/16.jpg)
Defining boolean variables Local boolean variables with initialization
boolean canProceed = true;boolean preferCyan = false;boolean completedSecretMission = true;
truecanProceed
falsepreferCyan
truecompletedSecretMission
![Page 17: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/17.jpg)
Other operators Equality operators == and !=
Operator == Returns true if the operands have the same value;
otherwise, returns false
Operator != Returns true if the operands have different values;
otherwise, returns false
The operators work with all types of values
![Page 18: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/18.jpg)
Evaluating boolean expressions Suppose
boolean p = true;boolean q = false;boolean r = true;boolean s = false;
What is the value ofp p && s !s p == q q q != r p && r r == s q || s q != s
![Page 19: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/19.jpg)
Evaluating boolean expressions Suppose
int i = 1;int j = 2;int k = 2;char c = '#';char d = '%';char e = '#';
What is the value ofj == k i != ki == j j != kc == e d != ec == d c != e
![Page 20: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/20.jpg)
Floating point precission What gets printed?
class FloatTest {public static void main (String args[]) {
double y = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
System.out.println (y);}
}
FloatTest.java There are 10 0.1’s
![Page 21: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/21.jpg)
Take care with floating-point values Consider
double a = 1;double b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1double c = .9999999999999999;
Two true expressions! a == b b != c
Two false expressions!a != b b == c
Problem lies with the finite precision of the floating-point types
Instead with the ordering operators for closeness
![Page 22: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/22.jpg)
How to solve this Don’t compare floating-point values if you can help it!
Need to test if the two doubles are “close” in value
Final double EPSILON = 0.000001;Math.abs (a-b) < EPSILON;
![Page 23: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/23.jpg)
Ordering operators Java provides ordering operators for the primitive types
Four ordering operators, <, >, <=, and >= They correspond to mathematical operators of <. >, ≤,
and ≥
Together the equality and ordering operators are known as the relational operators
False is less than true
![Page 24: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/24.jpg)
Evaluation boolean expressions Suppose
int i = 1;int j = 2;int k = 2;
What is the value ofi < jj < ki <= kj >= ki >= k
![Page 25: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/25.jpg)
Unicode values Character comparisons are based on their Unicode values
Characters ‘0’, ‘1’, … ‘9’ have expected order Character ‘0’ has the encoding 48 Character ‘1’ has the encoding 49, and so on.
Upper case Latin letters ‘A’, ‘B’, … ‘Z’ have expected order Character ‘A’ has the encoding 65, character ‘B’ has the
encoding 66, and so on.
Lower case Latin letters ‘a’, ‘b’, … ‘z’ have expected order Character ‘a’ has the encoding 97 Character ‘b’ has the encoding 98, and so on.
![Page 26: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/26.jpg)
Evaluation boolean expressions Suppose
char c = '2';char d = '3';char e = '2';
What is the value ofc < dc < ec <= ed >= ec >= e
![Page 27: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/27.jpg)
Becoming an IEEE author
57.19
10*33.3*42.0*82.2*3* midterm1labquiz1hw3hw2hw1grade
![Page 28: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/28.jpg)
![Page 29: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/29.jpg)
Operator precedence revisited Highest to lowest
Parentheses Unary operators Multiplicative operators Additive operators Relational ordering Relational equality Logical and Logical or Assignment
![Page 30: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/30.jpg)
Conditional constructs Provide
Ability to control whether a statement list is executed
Two constructs
If statement if if-else if-else-if
Switch statement
![Page 31: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/31.jpg)
Basic if statement Syntax
if (Expression) Action
If the Expression is true then execute Action
Action is either a single statement or a group of statements within braces
For us, it will always be a group of statements within braces
Expression
Action
true false
![Page 32: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/32.jpg)
Example
if (value < 0) { value = -value;}
Is our numbernegative?
If Value is notless than zero
then our numberis fine as is
If Value is less thanzero then we needto update its value
to that of its additiveinverse
false
Value < 0
Value = -Value
true
Our number is nowdefinitely
nonnegative
![Page 33: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/33.jpg)
Sorting two valuesSystem.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();
// rearrange numbers if necessaryif (value2 < value1) {
// values are not in sorted orderint rememberValue1 = value1;value1 = value2;value2 = rememberValue1;
}
// display valuesSystem.out.println("The numbers in sorted order are "
+ value1 + " and then " + value2);
What happens if the user enters 11 and 28?
What happens if the user enters 11 and 4?
![Page 34: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/34.jpg)
If semanticsAre the numbers outof order
Rearrange value1 andvalue2 to put their
values in the properorder
value2 < value1
int rememberValue1 = value1 value1 = value2 value2 = rememberValue1
true false
The numbers were initially inorder
The numbers were rearranged intothe proper order
The numbers are in order
![Page 35: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/35.jpg)
What an if statement executes An if statement executes the next block of code
A block is either:
A single statement without curly brackets:
if (a == b)System.out.println (“a==b!!!”);
A number of statements enclosed by curly brackets:
if (a == b) {System.out.print (“a”);System.out.print (“==”);System.out.print (“b”);System.out.println (“!!!”);
}
![Page 36: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/36.jpg)
Why we always use braces What is the output?
int m = 5;int n = 10;
if (m < n) ++m;++n;
System.out.println(" m = " + m + " n = " n);
![Page 37: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/37.jpg)
The if-else statement Syntax
if (Expression) Action1
else Action2
If Expression is true then execute Action1 otherwise execute Action2
The actions are either a single statement or a list of statements within braces
Expression
Action1 Action2
true false
![Page 38: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/38.jpg)
Finding the maximum of two valuesSystem.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another
integer number: ");int value2 = stdin.nextInt();
int maximum;if (value1 < value2) { // is value2 larger? maximum = value2; // yes: value2 is larger}else { // (value1 >= value2) maximum = value1; // no: value2 is not larger}System.out.println("The maximum of " + value1
+ " and " + value2 + " is " + maximum);
But it’s not initialized!!!
![Page 39: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/39.jpg)
Finding the maximum of two values
value1 < value2
maximum = value2 maximum = value1
true false
Is value2 larger than value1
Yes, it is . So value2 islarger than value1. Inthis case, maximum is
set to value2
No, its not. So value1is at least as large asvalue2. In this case,maximum is set to
value1
Either case, maximum is setcorrectly
![Page 40: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/40.jpg)
“It depends on what your definition of ‘is’ is.”
Bill Gates (at Microsoft’s anti-trust trial)
How do you define ‘is’?
![Page 41: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/41.jpg)
Why we use whitespace What does the following do?
System.out.print("Enter an integer number: ");int value1 = stdin.nextInt();System.out.print("Enter another integer number: ");int value2 = stdin.nextInt();if (value2 < value1) {int rememberValue1 = value1;value1 = value2;value2 = rememberValue1;}System.out.println("The numbers in sorted order are "+ value1 + " and then " + value2);
![Page 42: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/42.jpg)
How do you like your braces?
if (a == b){
//...} else {
//...}
if (a == b){
//...}else {
//...}
if (a == b){
//...} else {
//...}
if (a == b) {//...
} else {//...
}
![Page 43: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/43.jpg)
Testing objects for equality Consider
System.out.print("Enter an integer number: ");int n1 = stdin.nextInt();System.out.print("Enter another integer number: ");int n2 = stdin.nextInt();
if (n1 == n2) {System.out.println("Same");
}else {
System.out.println(“Different");}
What is the output if the user enters 88 both times?
What is the output if the user enters 88 and 3?
![Page 44: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/44.jpg)
Testing objects for equality Consider
String s1 = “pastel”;String s2 = “pastel”;
if (s1 == s2) {System.out.println("Same");
}else {
System.out.println("Different");}
![Page 45: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/45.jpg)
Testing objects for equality
Memory looks like
The comparison is between the references!
Thus, s1 and s2 are the same (they refer to the same object)
"pastel"s1
s2
![Page 46: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/46.jpg)
Testing objects for equality Consider
System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();
if (s1 == s2) {System.out.println("Same");
}else {
System.out.println("Different");}
What is the output if the user enters "pastel" both times?
![Page 47: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/47.jpg)
Testing objects for equality When it is executed
System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();
Memory looks like
As a result no matter what is entered s1 and s2 are not the same They refer to different objects
"pastel"s1
"pastel"s2
![Page 48: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/48.jpg)
Testing operators for equality Consider
System.out.print("Enter a string: ");String s1 = stdin.nextLine();System.out.print("Enter another string: ");String s2 = stdin.nextLine();
if (s1.equals(s2)) {System.out.println("Same");
}else {
System.out.println("Different");}
Tests whether s1 and s2 represent the same object
All objects have a method equals(). Their implementation is class-specific. The String equals() method – like many others – tests for equivalence in representation
![Page 49: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/49.jpg)
Some handy String class methods isDigit()
Tests whether character is numeric
isLetter() Tests whether character is alphabetic
isLowerCase() Tests whether character is lowercase alphabetic
isWhiteSpace() Tests whether character is one of the space, tab,
formfeed, or newline characters
![Page 50: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/50.jpg)
Some handy String class methods isUpperCase()
Tests whether character is uppercase alphabetic
toLowerCase() If the character is alphabetic then the lowercase
equivalent of the character is returned; otherwise, the character is returned
toUpperCase() If the character is alphabetic then the uppercase
equivalent of the character is returned; otherwise, the character is returned
![Page 51: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/51.jpg)
Voting woes Diebold Election Systems (DES)
Primary maker of voting machines in US Most machines don’t produce a paper receipt
Thus, how can you tell if the votes cast were counted right?
Controversy The president has stated, “committed to helping Ohio
deliver its electoral votes to” one of the candidtes Leak of internal memos Insecure systems
One line of code can change all the votes tallied! Diebold tried suing those who hosted the memos under
the DCMA They got slapped down in court
![Page 52: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/52.jpg)
The Obfuscated-V Contest/////////////////////// Vote Counter ////// Framework ///////////////////////#include <stdio.h>#include <ctype.h>
int main () { int Input; unsigned long total=0; unsigned long Tally[256]={0}; while ((Input=getchar())!=EOF) { unsigned char Vote=Input; if (!isspace(Vote)){ Tally[Input]+=1; total+=1; } } printf("Kerry %d\n",Tally['K']); printf("Bush %d\n",Tally['B']); printf("Nader %d\n",Tally['N']); printf("Other %d\n",total-Tally['K']-Tally['B']-Tally['N']); return 0;}
![Page 53: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/53.jpg)
If-else-if Consider
if (number == 0) {System.out.println("zero");
}else {
if (number > 0) { System.out.println("positive");
}else { System.out.println("negative");}
}
![Page 54: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/54.jpg)
If-then-else precedence
if (number != 0)if (number > 0)
System.out.println("positive");else
System.out.println("negative");
elseSystem.out.println("zero");
Which if does this else refer to?
![Page 55: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/55.jpg)
If-then-else precedence without whitespace
if (number != 0)if (number > 0)System.out.println("positive");elseSystem.out.println("negative");elseSystem.out.println("zero");
![Page 56: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/56.jpg)
If-else-if Better
if (number == 0) {System.out.println("zero");
}else if (number > 0) {
System.out.println("positive");}else {
System.out.println("negative");}
Same results as previous segment – but this segment better expresses the meaning of what is going on
![Page 57: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/57.jpg)
Sorting three values For sorting values n1, n2, and n3 there are six possible
orderings n1 n2 n3 n1 n3 n2 n2 n1 n3 n2 n3 n1 n3 n1 n2 n3 n2 n1
Suppose s1, s2, s3 are to be a sorted version of n1, n2, and n3
![Page 58: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/58.jpg)
Sorting three valuesif ((n1 <= n2) && (n2 <= n3)) { // n1 <= n2 <= n2
s1 = n1; s2 = n2; s3 = n3;}else if ((n1 <= n3) && (n3 <= n2)) { // n1 <= n3 <= n2
s1 = n1; s2 = n3; s3 = n2;}else if ((n2 <= n1) && (n1 <= n3)) { // n2 <= n1 <= n3
s1 = n2; s2 = n1; s3 = n3;}else if ((n2 <= n3) && (n3 <= n1)) { // n2 <= n3 <= n1
s1 = n2; s2 = n3; s3 = n1;}else if ((n3 <= n1) && (n1 <= n2)) { // n3 <= n1 <= n2
s1 = n3; s2 = n1; s3 = n2;}else { // n3 <= n2 <= n1
s1 = n3; s2 = n2; s3 = n1;}
![Page 59: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/59.jpg)
Finding the minimum value Consider:
// z is to hold the minimum of x and yif ( x < y )
z = x;else
z = y;
Another way to do this:
z = (x<y) ? x : y;
Notice no braces!
![Page 60: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/60.jpg)
The ?: notation Only works when both “cases” return a value!
Example: z = (x<y) ? x : y; Thus, you can’t put a print statement in there!
Can be difficult to read
![Page 61: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/61.jpg)
Switch statement Software engineers often confronted with programming tasks
where required action depends on the values of integer expressions The if-else-if construct can be used
Separately compare the desired expression to a particular value If the expression and value are equal, then perform
the appropriate action
Because such programming tasks occur frequently Java includes a switch statement
The task is often more readable with the switch then with the if-else-if
![Page 62: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/62.jpg)
A switch statement exampleif (a == ‘0’)
System.out.println (“zero”);else if (a == ‘1’)
System.out.println (“one”);else if (a == ‘2’)
System.out.println (“two”);else if (a == ‘3’)
System.out.println (“three”);else if (a == ‘4’)
System.out.println (“four”);else
System.out.println (“five+”);
switch (a) {case ‘0’:
System.out.println (“zero”);break;
case ‘1’:System.out.println (“one”);break;
case ‘2’:System.out.println (“two”);break;
case ‘3’:
System.out.println (“three”);break;
case ‘4’:
System.out.println (“four”);break;
default:System.out.println (“five+”);break;
}
![Page 63: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/63.jpg)
A bit of humor…
![Page 64: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/64.jpg)
Switch statement
switch ( SwitchExpression ) {
case CaseExpression1 :Action1 ;
case CaseExpression2 :Action2 ;
...
case CaseExpressionn :Actionn;
default :Actionn+1 ;
}
Constantintegral
expressionJavastatements
Integral expression tobe matched with a case
expression
![Page 65: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/65.jpg)
Testing for vowel-ness
switch (ch) {case 'a': case 'A':case 'e': case 'E':case 'i': case 'I':case 'o': case 'O':case 'u': case 'U':
System.out.println("vowel“);break;
default: System.out.println("not a vowel“);
}
The break causes an exiting of the switch
Handles all of the other cases
![Page 66: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/66.jpg)
Processing a request
System.out.print("Enter a number: ");int n1 = stdin.nextInt();
System.out.print("Enter another number: ");int n2 = stdin.nextInt();
System.out.print("Enter desired operator: ");char operator = stdin.nextLine().charAt(0);
switch (operator) {case '+' : System.out.println(n1 + n2); break;case '-' : System.out.println(n1 - n2); break;case '*' : System.out.println(n1 * n2); break;case '/' : System.out.println(n1 / n2); break;default: System.out.println(“Illegal request“);
}
![Page 67: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/67.jpg)
Short-circuit evaluation The value of a logical expression can be known before all the
operands have been considered If left operand of && is false, then the value must be false If right operand of || is true, then the value must be true
Java uses these properties to make logical operations efficient Evaluates left operand before it evaluates right operand If the operator value is determined from the left operand,
then the right operand is not evaluated The operation is short-circuited
![Page 68: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/68.jpg)
Short-circuit evaluation Short-circuit evaluation is useful when some property must
be true for some other expression to be evaluated
Suppose you are interested in knowing whether scoreSum divided by nbrScores is greater than value The condition can be evaluated only if nbrScores is
nonzero
The following expression correctly represents the condition (nbrScores != 0) && ((scoreSum / nbrScores) > value)
![Page 69: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/69.jpg)
class ShortCircuit {
static boolean returnsFalse() {System.out.println ("returnsFalse() called");return false;
}
static boolean returnsTrue() {System.out.println ("returnsTrue() called");return true;
}
public static void main (String args[]) {
if ( returnsFalse() && returnsTrue() ) {}
if ( returnsTrue() && returnsFalse() ) {}
if ( returnsFalse() || returnsTrue() ) {}
if ( returnsTrue() || returnsFalse() ) {}
}}
returnsFalse() called
returnsTrue() calledreturnsFalse() called
returnsFalse() calledreturnsTrue() called
returnsTrue() called
Output
![Page 70: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/70.jpg)
A digression: Perl Perl uses short-circuit evaluation also:
open (LOGFILE, ">outputfile") || die (“Cannot open outputfile!);
If the open command succeeds, then the die command is not evaluated
If the open command fails, then the die command is evaluated
![Page 71: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/71.jpg)
ColoredTriangle Background
Triangles are an important shape in the world of computer graphics
When computer animations are created, scenes are typically decomposed into a collection of colored triangles
Informal specification Represent a colored triangle in two-dimensional space Provide the constructors and methods a reasonable user
would expect
![Page 72: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/72.jpg)
ColoredTriangle – see the cat
![Page 73: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/73.jpg)
ColoredTriangle – expected constructors Default construction
Construct a reasonable triangle representation even though no explicit attributes values are given
public ColoredTriangle()
Specific construction Construct a triangle representation from explicit
attributes values
public ColoredTriangle(Point v1, Point v2, Point v3,Color c)
Point is in the java.awt package
![Page 74: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/74.jpg)
Motivational posters…
![Page 75: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/75.jpg)
ColoredTriangle – expected behaviors Provide the area
Return the area of the associated triangle
public double getArea()
Provide the perimeter Return the perimeter of the associated triangle
public double getPerimeter()
Access an endpoint Provide a requested endpoint of the associated triangle
public Point getPoint(int i)
![Page 76: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/76.jpg)
ColoredTriangle – expected behaviors Access the color
Provide the color of the associated triangle
public Point getColor()
Set an endpoint Set a particular endpoint point of the associated triangle
to a given value
public void setPoint(int i, Point p)
Set color of the triangle Set the color of the associated triangle to a given value
public void setColor(Color c)
![Page 77: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/77.jpg)
ColoredTriangle – expected behaviors Render
Draw the associated triangle in a given graphical context
public void paint(Graphics g)
Test equality Report whether the associated triangle is equivalent to a
given triangle
public boolean equals(Object v)
String representation Provide a textual representation of the attributes of the
associated triangle
public String toString()
![Page 78: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/78.jpg)
ColoredTriangle – attributes To implement the behaviors
Knowledge of the triangle color and three endpoints suffices
Endpoint can be represented using two int values per location or as a Point Point seem more natural
private Color color Color of the associated triangle
private Point p1 References the first point of the associated triangle
private Point p2 References the second point of the associated triangle
private Point p3 References the third point of the associated triangle
![Page 79: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/79.jpg)
Default constructor – implementation
// ColoredTriangle(): default constructorpublic ColoredTriangle() {Point a = new Point(1, 1);Point b = new Point(2, 2);Point c = new Point(3, 3);setPoint(1, a);setPoint(2, b);setPoint(3, c);setColor(Color.BLACK);
}
Create endpoint values
Copy desired endpoint values to data fields
Copy desired color to data fields
![Page 80: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/80.jpg)
Implementation – accessor getPoint()// getPoint(): endpoint accessorpublic Point getPoint(int i) {
if (i == 1) {return p1;
}else if (i == 2) {
return p2;}else if (i == 3) {
return p3;}else {
System.out.println("Unexpected endpoint access: “+ i);
System.exit(i);return null;
}}
Won’t be executed but compiler wants every execution path to end with a return
![Page 81: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/81.jpg)
Implementation – facilitator toString()
// toString(): string facilitatorpublic String toString() {
Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();
return "ColoredRectangle[" + v1 + ", " + v2 + ", " + v3
+ ", " + c + "]";}
Standard to include class name when expected use is for debugging
Remember, this method MUST be public!
![Page 82: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/82.jpg)
Invocation – facilitator toString()
Point a = new Point(2,1),Point b = new Point(1,2)Point c = new Point(3,2);ColoredTriangle u = new ColoredTriangle(a, b, c, Color.RED);System.out.println(u); // displays string version of u
ColoredTriangle[java.awt.Point[x=2,y=1], java.awt.Point[x=1,y=2], java.awt.Point[x=3,y=2], java.awt.Color[r=255,g=0,b=0]]
![Page 83: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/83.jpg)
// equals(): equals facilitatorpublic boolean equals(Object p) {
if (p instanceof ColoredTriangle) {Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();ColoredTriangle t = (ColoredTriangle) p;
return v1.equals(t.getPoint(1))&& v2.equals(t.getPoint(2))&& v3.equals(t.getPoint(3)) && c.equals(t.getColor());
}else {
return false;}
}
Implementation – facilitator equals()
instanceof tests whether left operand is an instance of right operand
The prototype mustbe this line
![Page 84: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/84.jpg)
Invocation – facilitator equals()
ColoredTriangle e = new ColoredTriangle();ColoredTriangle f = new ColoredTriangle(new Point(2,1),
new Point(1,2), new Point(3,2), Color.YELLOW);ColoredTriangle g = new ColoredTriangle(new Point(2,1),
new Point(1,2), new Point(3,2), Color.YELLOW);
boolean flag1 = e.equals(f);boolean flag2 = e.equals(g);boolean flag2 = e.equals(g);
System.out.println(flag1 + " " + flag2 + " " + flag3);
![Page 85: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/85.jpg)
Invocation – facilitator equals()e ColoredTriangle
p1:
p3:
p2:
color:
x: 1 y: 1Point
x: 2 y: 2Point
x: 3 y: 3Point
r: 0 y: 0Color g: 0
f ColoredTriangle
p1:
p3:
p2:
color:
x: 2 y: 1Point
x: 1 y: 2Point
x: 3 y: 2Point
r: 0 y:255Color g: 0
g ColoredTriangle
p1:
p3:
p2:
color:
x: 2 y: 1Point
x: 1 y: 2Point
x: 3 y: 2Point
![Page 86: Decisions, decisions, decisions. Background Our problem-solving solutions so far have the straight-line property They execute the same statements for](https://reader035.vdocument.in/reader035/viewer/2022070404/56649f355503460f94c52ae2/html5/thumbnails/86.jpg)
Implementation – facilitator paint()// paint(): render facilitatorpublic void paint(Graphics g) {
Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();
g.setColor(c);
Polygon t = new Polygon();t.addPoint(v1.x, v1.y);t.addPoint(v2.x, v2.y);t.addPoint(v3.x, v3.y);
g.fillPolygon(t);}
Part of awt
Renders a polygon using the list of points in the polygon referenced by t