CS 1063
Week 9: Decisions
Objectives
- Write arithmetic expressions in Java
- Enhance the Purse
class
- Read input from the console
Assignments
- Reading
Week 9
- Lab 6 due
(Monday)
- Begin Lab 7 (Monday)
- Begin Project 2
- Take Quiz 7 (Thursday, Friday and Saturday)
Boolean expressions with relational operators
A boolean expression is one that has a value that is
either
true or false. Use a boolean
variable
to hold the value of a boolean expression.
A relational operator is one that compares two values.
(In
contrast to an arithmetic operator that combines two values to produce
a
new arithmetic value.)
Relational operators
|
Symbol
|
Meaning
|
Example
|
==
|
equal to |
if ( a == 5 ) |
>
|
greater than |
if ( salary > 30000 ) |
<
|
less than |
if ( 0 < salary ) |
!=
|
not equal toi |
if ( a != b ) |
>=
|
greater than or equal to |
if ( salary >= 10000 ) |
<=
|
less than or equal to |
if ( 20000 <= salary ) |
- The two operands of a relational operator should be the same
data type,
although Java does allow some mixing of types.
- Relational operators return a true or false
answer
- Note difference between test for equality (
==) and
the assignment operator (=).
- When comparing floating-point numbers, don't test for
equality. Instead, check whether they are close enough
Assume that x and y are double values and that
the constant EPSILON = .00001
The following statement will compare x and y and determine is they are
"close" enough
if( Math.abs( x - y ) <=
EPSILON
The if and if/else statements
| The if statement lets a
program carry out different actions depending on the outcome of a
condition. |
One consequent:
if (condition)
truestatement;
Two alternatives:
if (condition)
truestatement;
else
falsestatement;
Examples of using just an if
statement:
if ( numGrades != 0 )
average = sum/numGrades;
if( amount <= balance )
balance = balance - amount;
Examples of using the if/else
statement:
if ( value >= 0 )
System.out.println("square root of " + value + " = " + Math.sqrt(value));
else
System.out.println("nonpositive number " + value + " entered");
if ( amount <= balance )
balance = balance - amount;
else
balance = balance - OVERDRAFT_PENALITY;
| A block statement groups
together several statement |
Example: What does the following do? (Trace with variables)
if ( x > y ){
temp = x;
x = y;
y = temp;
}
In the above example more than one statement is included in the
consequent, so we use curly braces ({}) to group them.
Activity 1
- Assign theMin to be
the smallest of x and y
- Write an if
statement that assigns 100 to x when y is equal to 0.
- Write an if-else
statement that assigns 0 to x when y is equal to 10. Otherwise it
should assign 1 to x.
- Write an if
statement that sets the variable hours to 10 when the boolean variable minumum is equal to
true
- Calculate wages as hoursWorked
times hourlyRate with
time and a half for overtime( hours over 40)
Activity 2 The QuadraticEquation
Class
Write a program that prints all real solutions to
the quadratic equation ax2 + bx + c = 0. Read in a,b,c
and use the quadratic formula. If the discriminant b2
- 4ac is negative, display a message stating that there are no real
solutions.
Implement the class QuadraticEquation
whose constructor receives the coefficients a, b, and c of the quadratic
equation. Supply methods calculateSolution1
and calculateSolution2
that get the solutions, using the quadratic formula. Supply a
method boolean
hasSolution() that returns false
if the discriminant is negative and true otherwise.
Setup:
- Project/Package name: quadraticequationpkg
- New main class: QuadraticEquationTest
- New class (be sure to uncheck main method here): QuadraticEquation
- Save all
- Run -> new -> browse (...) -> chose the file QuadraticEquationTest
->
ok
Test your class by asking the user to enter values for a, b and
c. Remember that you must use hasSolution before you call calculateSolution1 and calculateSolution2. Find
3 values that produce the message no real solution and 3 values that
have a solution
Multiple-alternative decision
Multiple conditions can be
combined to evaluate complex decisions. The correct arrangement
depends on the logic of the problem to be solved.
|
if (score >= 90)
System.out.println("Grade is A");
else if (score >= 80)
System.out.println("Grade is B");
else if (score >= 70)
System.out.println("Grade is C");
else if(score >= 60)
System.out.println("Grade is D");
else
System.out.println("Grade is F");
System.out.println("Score is " + score);
Nested selection statements in the if clause
Nested selection occurs when the either the true clause
or the false clause are themselves an if
statement. When the nesting occurs in the if, the code
can be very confusing. What happens in the following when x
has value 5 and y has value 2?
if (x >= 0)
if(y >= x)
System.out.println(" y >= x >= 0 ");
else
System.out.println( "
x < 0 " );
Answer: probably not what you think. The Java rule for
matching else with if is that Java matches
each else with the closest preceding if
that is not matched with a
closer else. (It doesn't matter how YOU indent.)
A corrected version using {}:
if (x >= 0){
if(y >= x)
System.out.println(" y >= x >= 0 ");
}
else
System.out.println( " x
< 0 " );
Hint: Try to avoid the nesting of selection in the if clause, it
is almost always hard to figure out. Instead, reorganize your
code or use boolean operators to combine conditions.
Activity 3
- Using the following chart, write an if-else-if statement that
assigns .10, .15 or .20 to commission, depending on the value in sales.
Sales
|
Commission Rate
|
Up to $10,000
|
10%
|
| 10,000 to 15,000 |
15%
|
| Over 15,000 |
20%
|
Activity 4 The Earthquake
Class
Write a program that asks for a value describing the magnitude of an
earthquake on the Richter scale and prints a description of the likely
impact of the quake. The Richter scale is a measurement for the
strength of an earthquake. Every step in the scale, for example
from 6.0 to 7.0, signifies a tenfold increase in the strength of the
quake. Use the following:
if the richter is >= 8.0 output "Most structures fall"
if the richter is >= 7.0 and < 8.0 output "Many buildings
destroyed"
if the richter is >= 6.0 and < 7.0 output " Many buildings
considerably damaged; some collapse"
if the richter is >= 4.5 and < 6.0 output "Damage to poorly
constructed buildings"
if the richter is >= 3.5 and < 4.5 output "Felt by many people,
no destruction"
if the richter is >= 0 and < 3.5 output "Generally not felt by
people"
if the richter is < 0 output "Negative numbers are not valid"
This solution should use a multiple-alternative decision without the
and / or operators. For this solution write an Earthquake class with a
constructor that takes the magnitude of the earth quake and a method
that calculates and returns the description of the effect as a String. Provide a method setMagnitude(double magnitude)
that replaces the current magnitude with a new one. Use the
following data that tests your branches.
Instantiate an Earthquake
object e with a magnitude of 9.0
Output the effect
set the magnitude at 8.0
Output the effect
set the magnitude at 7.5
Output the effect
set the magnitude at 7.0
Output the effect
set the magnitude at 6.5
Output the effect
set the magnitude at 6.0
Output the effect
set the magnitude at 5.0
Output the effect
set the magnitude at 4.5
Output the effect
set the magnitude at 4.0
Output the effect
set the magnitude at 3.5
Output the effect
set the magnitude at 2.0
Output the effect
set the magnitude at 0.0
Output the effect
set the magnitude at -1.0
Last
Modified: January 3,
2007 at 10:28am