41
CS 121 Week 4 - Monday

Week 4 - Monday. What did we talk about last time? Wrapper classes if statements

Embed Size (px)

Citation preview

CS 121Week 4 - Monday

Last time

What did we talk about last time? Wrapper classesif statements

Questions?

Project 1

Conditional Execution Review

Conditional execution

So far we have only considered Java programs that do one thing after another, in sequence

Our programs have not had the ability to choose between different possibilities

Now, they will!

Behold!

The if-statement:

x is small will only print out if x is less than 5

In this case, we know that it is, but x could come from user input or a file or elsewhere

int x = 4;

if( x < 5 )System.out.println("x is small!");

The if part

Any boolean expression

Any single executable statement

Anatomy of an if

if( condition ) statement;

Conditions

Conditions in the if

Any statement that evaluates to a boolean is legal

Examples: x == y true Character.isDigit('r') s.equals("Help me!") && (z < 4)

Comparison

The most common condition you will find is a comparison between two things

In Java, that comparison can be: == equals != does not equal < less than <= less than or equal to > greater than >= greater than or equal to

These are called relational operators

Equals

You can use the == operator to compare any two things of the same type

Different numerical types can be compared as well (3 == 3.0)

Be careful with double types, 0.33333333 is not equal to 0.33333332

int x = 3;if( x == 4 )System.out.println("This doesn't print");

Not Equals

Any place you could have used the == operator, you can use the != operator

If == gives true, the != operator will always give false, and vice versa

If you want to negate a condition, you can always use the ! as a not

is the same as

if( x != 4 )

if( !(x == 4) )

= != ==

Remember, a single equal sign (=) is the assignment operator (think of a left-pointing arrow)

A double equals (==) is a comparison operator

int y = 10;if( y = 6 ) //compiler error!

boolean b = false;if( b = false ) //no error but wrong

Less Than (or Equal To)

Inequality is very important in programming

You may want to take an action as long as a value is below a certain threshold

For example, you might want to keep bidding at an auction until the price is greater than what you can afford

Watch for strict inequality (<) vs. non-strict inequality (<=)

if( x <= 4 )System.out.println("x is less than 5");

Greater Than (or Equal To)

Just like less than or equal to, except the opposite

Note that (because of the All-Powerful Math Gods) the opposite of <= is > and the opposite of >= is <

Thus, !( x <= y ) is equivalent to ( x > y ) !( x >= y ) is equivalent to ( x < y )

Else

Either/Or

Sometimes you have to make a decision

If a condition is true, you go one way, if not, you go the other

For example: If I pass CS121,▪ Then I throw a kegger to celebrate

Otherwise,▪ I punch Dr. Wittman in the face

Exclusivity

Notice the nature of this kind of condition

Both outcomes cannot happen Either a kegger gets thrown or Dr.

Wittman gets punched in the face For these situations, we use the else

construct

Anatomy of an if-else

Two different

outcomes

if( condition ) statement1;

elsestatement2;

else example

Scanner in = new Scanner(System.in);int balance = in.nextInt();

if( balance < 0 )System.out.println("You are in debt!");

elseSystem.out.println("You have a $" + balance);

Multiple Statements and Nesting

What if you need to do several things conditionally?

No problem Use braces to treat a group of

statements like a single statement

if( x == 4 ){System.out.println("I hate 4");System.out.println("Let's change x.");x = 10;

}

An if with multiple statements

if( condition ){

statement1;statement2;…statementn;

}

A whole bunch of

statements

Nesting

Sometimes you want to make one set of decisions based on another set of decisions

if-statements can be nested inside the bodies of other if-statements

You can put if-statements inside of if-statements inside of if-statements… going arbitrarily deep

Nested ifs

if( condition1 ){

statement1;if( condition2 ) {

if( condition3 )statement2;

…}

}

An example using quadrants

For the next example, recall the 4 quadrants of the Cartesian coordinate system

x-x

y

-y

(0,0)

12

3 4

Nesting example

Find which quadrant the point (x,y) is inif( x >= 0.0 )

{if( y >= 0.0 )

System.out.println("Quadrant 1");else

System.out.println("Quadrant 4");}else{if( y >= 0.0 )

System.out.println("Quadrant 2");else

System.out.println("Quadrant 3");}

if and else if

You can list a sequence of exclusive possibilities using nesting:

if( index == 1 ) System.out.println("First");

else if( index == 2 )System.out.println("Second");

else if( index == 3 )System.out.println("Third");

elseSystem.out.println(index + "th");

else-if doesn’t actually exist

A block of code is treated just like one statement

A whole if-else is treated the sameif( … )

statement1;else if( … )

statement2;else

statement3;

if( … ){

statement1;}else{if( … )

statement2;else

statement3;}

=

Pitfalls

Watch out!

Now you are controlling the flow of execution in your program

There is a wider range of mistakes you can make when giving instructions

Huge chunks of code can be executed or skipped by mistake

Here are a few things to watch out for

Empty statements

Remember that an if-statement is not an executable statement

It does not end with a semicolon

if( balance < 0 ); // empty statement{ // this block always runsSystem.out.println("You owe a fee!");balance -= 15;

}

Confusing indentation

In some languages, indentation actually matters

Java ignores whitespace

"Fight!" prints no matter what

if( enemies > 2 ) System.out.println("Run away!");

elsedefense = true;System.out.println("Fight!");

Imprecise conditions

It’s easy to make logical errors when writing conditions

If an airline allows two or fewer bags on the plane, someone might code that as:

But this is too restrictive. It should be:

if( bags < 2 ) // only allows 1 or 0boarding = true;

if( bags <= 2 )boarding = true;

Reversed conditions

Sometimes it’s easy to get a condition backwards

Try not to assume you wrote the condition correctly

Always double check

if( number % 3 == 0 ) System.out.println("Not divisible by 3!");

elseSystem.out.println("Divisible by 3!");

if Examples

Speed limit

Sometimes you probably break the speed limit

But, there's one speed limit you can never break

The speed of light c is about 3 x 108 m/s

Given a variable named speed of type double, what's an if-statement that will print an error message if speed is larger than c?

Upcoming

Next time…

Examplesswitch statements

Reminders

Keep reading Chapter 4 of the textbook

Keep working on Project 1 (due this Friday)

Exam 1 is next Monday