selections - siue

31
Chapter 3 Ch 1 – Introduction to Computers and Java Selections 1

Upload: others

Post on 11-May-2022

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Selections - SIUE

Chapter 3

Ch 1 – Introduction to Computers and Java

Selections

1

Page 2: Selections - SIUE

The if-else Statement

2

Page 3: Selections - SIUE

Flow Chart Deconstructed

boolean expression

true statements

false statement

Start

Stop

Terminator: Show start/stop

points

Process: Statements to

execute

Decision: Make a choice

Connector: Connect lines

FT

3

A flow chart is an easy way to graphically express your logic, without having to write any code. You are encouraged to develop your flowcharting skills as a means to express your solution graphically.

As a programmer you are constantly asked to solve problems, and using algorithms is how you present your step by step solution to the problem at hand, that does not require the use of code.

So, an algorithm, being your recipe of steps to follow in order to solve a particular problem can be graphically represented with a flowchart. It is another way to show the same results, one text base and the other graphical based.

Page 4: Selections - SIUE

Flow Chart Deconstructed<Taxes owed>

Start

Stop

taxesOwed = income * TAX_RATE

income > NO_TAX_AMOUNT

taxesOwed = 0.0

income <= NO_TAX_AMOUNT

4

In the example demonstrated above, we begin with the "Start" terminator as the beginning of our algorithm.

We then have to make a choice, is the income less than or equal to the no tax amount? This choice is shown with the use of the "Decision" symbol, and as shown, it has two possible outcomes, True or False.

If the income is less than or equal to the no tax amount, we execute the statement(s) on the left, i.e. we assign 0.0 to the variable taxesOwed. If the income is greater, we execute the statement(s) on the right, which assigns the quantity income * TAX_RATE to the income variable.

As you can see from above, one of two outcomes is possible. We say that the choices are mutually exclusive, only one of the two will ever execute after a decision has been made.

Once a decision has been made and one of the two outcomes is executed, then execution continues with the steps that follow. This is indicated with the conversion of the flow lines into the "Connector" and ultimately the "Stop" terminator.

Page 5: Selections - SIUE

If else Deconstructed <Taxes owed>

...

if (income <= NO_TAX_AMOUNT) { taxesOwed = 0.0;}

else { taxesOwed = income * TAX_RATE;} //end if

...

boolean expression

true statements

false statements

5

Java provides the if control structure for making decisions.

The above example shows a decision with two possible outcomes, thus an if-else is used. The statements after the if boolean expression make up the true block, and the statements after the else make up the false block.

Keep in mind that the else part is always optional and its use depends on how many possible outcomes you have. If you have one, then it is not used, if two it is used.

Page 6: Selections - SIUE

Application Deconstructed<TaxesOwed.java>

package taxesowed;

import java.util.Scanner;

public class TaxesOwed { public static final double NO_TAX_AMOUNT = 10000.0; public static final double TAX_RATE = 0.03; public static void main(String[] args) { double income; double taxesOwed; Scanner keyboard = new Scanner(System.in); System.out.print("Enter your income amount: $"); income = keyboard.nextDouble();

6

Page 7: Selections - SIUE

Application Deconstructed<TaxesOwed.java>

if (income <= NO_TAX_AMOUNT) { taxesOwed = 0.0; } else { taxesOwed = income * TAX_RATE; }// end else System.out.println("You owe $" + taxesOwed + " on an income of $" + income); }// end main()}// end TaxesOwed

7

Page 8: Selections - SIUE

Boolean expressions may use the following relational operators

Operation Operator Example

equality == a == b

inequality != a != b

greater than > a > b

greater than or equal >= a >= b

less than < a < b

less than or equal <= a <= b

8

The relational operators or comparison operators allow you to perform a number of comparisons whose outcome is a boolean result, i.e. either true or false.

Warning: The equality is expressed with two equal signs, not one, so be careful as the latter will cause an error. For example, if (a = b) is not the same as if (a == b), and will make the compiler very unhappy.

The equality works as expected with integral values, but not so well with floating point and strings. Floating point variables recall, may be simply approximations of the actual numbers, thus comparison may lead to undesirable results. It is best to compare the difference of the two against an acceptable margin of error.

Strings also pose a problem, since strings are actually objects. An object variable is nothing more than a reference (pointer) to the actual value of the object in memory, and thus two separate memory locations could have the exact same string value, but since their memory locations are different, the relational operators will result in an inaccurate outcome. An example of this is shown next.

Page 9: Selections - SIUE

... and the following logical operators

Operation Operator Example

And && (a < b) && (c > d)

Or || (a == b) || (c == d)

Not ! !fileIsOpen

9

Logical operators can be used to create compound expressions. The meaning of the operators is similar to what you may have learned while studying boolean algebra. Here is the low down on each one.

&& : True only when both arguments are true, false otherwise.

|| : False only when both argumenst are false, true otherwise.

! : The complement of its argument. This one should be avoided in expressions using the relational operators, since it leads to unreadable code. For example, !(c < 0) is best expressed as (c >= 0), a more readable form.

Page 10: Selections - SIUE

Application Deconstructed<StringEquality.java>

package stringequality;import java.util.Scanner;

public class StringEquality { public static void main(String[] args) { String str1; String str2; Scanner keyboard = new Scanner(System.in); System.out.print("Enter some text: "); str1 = keyboard.nextLine(); System.out.print("Enter more text: "); str2 = keyboard.nextLine();

10

Page 11: Selections - SIUE

Application Deconstructed<StringEquality.java>

System.out.println(); System.out.println("str1 = \"" + str1 + "\" : str2 = \"" + str2 + "\""); System.out.println(); System.out.println("str1 == str2 ? " + (str1 == str2)); System.out.println("str1.equals(str2) ? " + str1.equals(str2));

System.out.println("str2.equals(str1) ? " + str2.equals(str1));

11

Notice how the test str1 == str2 evaluates to false, even though the two string objects have the same value. This is important to understand because it underlies the fact that object variables (str1, str2 in this example) are merely references (pointers) to the actual objects, which both happen to the have the same value ("Apples are red"), but are in different memory locations.

For proper string value comparisons, use the method .equals().

Page 12: Selections - SIUE

Application Deconstructed<StringEquality.java>

str2 = "apples are red"; System.out.println(); System.out.println("str1 = \"" + str1 + "\" : str2 = \"" + str2 + "\""); System.out.println(); System.out.println("str1.equals(str2) ? " + str1.equals(str2)); System.out.println("str1.equalsIgnoreCase(str2) ? " + str1.equalsIgnoreCase(str2)); }// end main()}// end StringEquality

12

Since Java is case sensitive, if you want to compare two strings without accounting for the case, then use the method .equalsIgnoreCase(), as shown above. This method treats uppercase the same as lowercase.

Page 13: Selections - SIUE

Application Deconstructed<StringEquality.java>

13

Page 14: Selections - SIUE

Application Deconstructed<MultiBranchIf.java>

package multibranchif;import java.util.Scanner;

public class MultiBranchIf { public static final int SUN = 1; public static final int MON = 2; public static final int TUE = 3; public static final int WED = 4; public static final int THU = 5; public static final int FRI = 6; public static final int SAT = 7; public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); int weekDayNumber; String weekDayName = "";

14

constants for the days of the week

Notice the use of constants to aid readability and maintenance. If a change is needed later on to one of these values, then all you have to do is change one constant value. You will not have to search all of your code for each occurrence of the value itself.

Page 15: Selections - SIUE

Application Deconstructed<MultiBranchIf.java>

System.out.print("Enter the day of the week [1-Sunday...7-Saturday]: "); weekDayNumber = keyboard.nextInt(); if (weekDayNumber == SUN) { weekDayName = "Sunday"; }else if (weekDayNumber == MON) { weekDayName = "Monday"; }else if (weekDayNumber == TUE) { weekDayName = "Tuesday"; }else if (weekDayNumber == WED) { weekDayName = "Wednesday"; }else if (weekDayNumber == THU) { weekDayName = "Thursday"; }else if (weekDayNumber == FRI) { weekDayName = "Friday"; }else if (weekDayNumber == SAT) { weekDayName = "Saturday"; }// end if

15

This is just an if else, where each else contains an if else.

Recall that this if-else if structure is an if-else with nested if's inside the else. For instance,

if (...) { ... }else if (...) { ... } else { }

can be rewritten as:

if (...) { ... } else { if (...) { } else { } }

Page 16: Selections - SIUE

Application Deconstructed<MultiBranchIf.java>

System.out.println("I see you chose " + weekDayName + "."); }// end main()}// end MultiBranchIf

16

Page 17: Selections - SIUE

The conditional operator isvery handy

17

// The following if-else:if (minute == 60) { minute = 0;}else { minute += 1;}

// can be written with a conditional operator as:minute = (minute == 60)? 0 : minute + 1;

The conditional operator is just like an if-else. An expression is given in parentheses followed by a question mark; this constitues your boolean expression in an if. If the expression evaluates to true then the first part between the ? and the : is executed. This is the equivalent of the true block in an if. Next comes the part between the : and the ;. This is the equivalent of the false block in an if.

Page 18: Selections - SIUE

Recap

▪ Use flowcharts to express algorithms.

▪ Use the if for decisions.

▪ Use .equals or .equalsIgnoreCase with strings

18

Page 19: Selections - SIUE

The Type boolean

19

True or False?

Page 20: Selections - SIUE

Boolean expressions evaluate to true or false

▪ number > 0– True if number > 0, false otherwise

▪ 3 > 4– False

▪ 3– True, since not 0

20

Every boolean expression must evaluate to either true or false.

Zero means false, and any non zero value means true.

Page 21: Selections - SIUE

Boolean variables simplify

// Testing for leap year.if ( (year % 100 != 0) && (year % 4 == 0) || (year % 400 == 0) ) { // leap year}

// Testing for leap year.boolean isLeap = (year % 100 != 0) && (year % 4 == 0) || (year % 400 == 0);

if (isLeap) { // leap year}

The && has higher priority than ||

The second "if" is a lot easier to read and thus should be preferred over the first example, which is a lot hard to read and debug.

A boolean variable can receive the evaluation of a boolean expression, as in:

boolean isOfAge = (age > 21);

The variable isOfAge will be true if age > 21, false otherwise.

Page 22: Selections - SIUE

Be mindful of the order of evaluation

▪ Parentheses go first, then

▪ Arithmetic, then

▪ Relational, and then

▪ Logical

Page 23: Selections - SIUE

Brainteaser time!

int x = 3 * 5 + (4 – 5) / 2 + 6 % 4;

bool goAhead = 5 > 3 || 3 + 5 < 3 * 2;

bool isRaining = true;bool haveUmbrella = false;

bool gotWet = isRaining && !haveUmbrella;

Page 24: Selections - SIUE

Booleans use true or falseboolean isOld = true;

24

System.out.println("isOld = " + isOld);// displays isOld = true

System.out.print("Answer true or false. This is fun: "; boolean isOfAge = keyboard.nextBoolean();

// IO Answer true of false. This is fun: true

Page 25: Selections - SIUE

Recap

▪ Booleans hold either true or false.

▪ (), arithmetic, relational, logical, in that order.

▪ Boolean variables simplify code.

25

Page 26: Selections - SIUE

The switch statement

26

statementsTrue

False

case 1

statements

False

True

default

case n

Page 27: Selections - SIUE

Switch Deconstructed

switch (expression) { case label1: statements; [break];

case label2: statements; [break]; ... default: statements; [break]; }

break is optional

default is optional

sdk 7: label canbe a string

Page 28: Selections - SIUE

Switch Deconstructed<DayOfTheWeek>

// ... code omitted

switch (dayOfTheWeek) {case MON: case TUE: case WED: case THU: case FRI: System.out.println("Bah, still a work day!");

break;

case SAT: case SUN: System.out.println("Woo hoo, weekend!); break;

default: System.out.println("No comprendo!"); break;}

28

Evaluation will begin at the top of the switch, and as soon as one case is selected, its body will execute and the switch will exit.

If none of the cases are selected, then the default case will execute.

If the break is omitted from any case then after its body is executed, control will always continue with the next case that follows.

Page 29: Selections - SIUE

Brainteaser time!

Draw the flow chart for the DayOfTheWeek switch

Page 30: Selections - SIUE

Application Deconstructed<DayOfTheWeek.java>

package dayoftheweek;

import java.util.Scanner;

public class DayOfTheWeek { public static final int SUN = 1; public static final int MON = 2; public static final int TUE = 3; public static final int WED = 4; public static final int THU = 5; public static final int FRI = 6; public static final int SAT = 7; public static void main(String[] args) { int dayOfTheWeek; Scanner keyboard = new Scanner(System.in);

30

Page 31: Selections - SIUE

Application Deconstructed<DayOfTheWeek.java>

System.out.print("Enter the day of the week [Sun = 1...Sat = 7]: "); dayOfTheWeek = keyboard.nextInt(); switch (dayOfTheWeek) { case MON: case TUE: case WED: case THU: case FRI: System.out.println("Bah, still a work day!"); break; case SAT: case SUN: System.out.println("Woo hoo, weekend!"); break; default: System.out.println("No comprendo!"); break; }// end switch }// end main()}// end DayOfTheWeek 31