Computer Science 1302

download Computer Science 1302

of 111

Transcript of Computer Science 1302

  • 7/30/2019 Computer Science 1302

    1/111

    11

    Chapter 3

    DECISION STRUCTURES

  • 7/30/2019 Computer Science 1302

    2/111

    22

    THE ifSTATEMENT

    The ifstatement allows us to specify the condition under which a

    statement or block of statements is to be executed.

    The general form of the ifstatement is as follows:

    if (Boolean expression){

    statement(s);}

    The keyword ifis followed by a parenthesized Boolean

    expression. If this conditional expression is true, the

    statement(s) in the block that follows are executed. The

    statement(s) in the block are skipped if the Boolean expression is

    alse.

  • 7/30/2019 Computer Science 1302

    3/111

    33

    THE ifSTATEMENT

    Using Relational Operators to Form Boolean

    ExpressionsFrequently, the Boolean expression used as the test in an if

    statement is formed using a relational operator.

    A relational operator tests whether a particular relationshipexists between its operands.

    *** See Table 3-1 of the text

  • 7/30/2019 Computer Science 1302

    4/111

    44

    THE ifSTATEMENT

    Using Relational Operators to Form Boolean

    Expressions

    is not equal to!=

    is equal to==

    is less than or equal to=

    is less than

    MeaningRelational Operator

  • 7/30/2019 Computer Science 1302

    5/111

    55

    THE ifSTATEMENT

    Using Relational Operators to Form Boolean

    Expressions

    All of the relational operators are binary operators, meaningthey take two operands.

    The relational operators have lower precedence than the

    arithmetic operators *, /, %, +, and , but higher precedencethan the assignment operators (including the combinedassignment operators).

    The relational operators associate from left to right.

    *** See Appendix C of the text

  • 7/30/2019 Computer Science 1302

    6/111

    66

    THE ifSTATEMENT

    Using Relational Operators to Form Boolean

    ExpressionsGiven that the variables a and b have the values specified at the

    left, fill in the table showing the values of the expressions given.

    Values of variables Expression Value?

    int a = 5, b = 6 b < adouble a = 8.9, b = 4.2 a > bint a = 10, b = 12 a = Z

    int a = 5, b = 6, c = 4 a * c != (b + c) * 2

  • 7/30/2019 Computer Science 1302

    7/111

    77

    THE ifSTATEMENT

    The statement below specifies that five is to be added to t

    only ifx is greater than zero.

    if(x > 0){

    t += 5;}

    Notice that there is not a semicolon after the parenthesized

    Boolean expression. Remember that semicolons mark the

    end of a statement, not the end of a line. A complete if

    statement includes a conditionally executed statement or

    block.

  • 7/30/2019 Computer Science 1302

    8/111

    88

    THE ifSTATEMENT

    If you accidentally put a semicolon after the conditional

    expression, the compiler will think that the conditionally

    executed statement is the null statement. The null statement

    is an empty statement that does nothing.

    if (x > 0);{

    t += 5;}

    The semicolon disconnects the statement t += 5; from the if;it is no longer conditionally executed. Five will always be

    added to tregardless of the value ofx.

    Putting a semicolon here is a

    logical error

  • 7/30/2019 Computer Science 1302

    9/111

    99

    THE ifSTATEMENT

    Programming Style for ifStatements

    When writing a ifstatement:

    Begin the conditionally executed statement or block on

    the line below the if (Boolean expression). Indent the conditionally executed statement(s) one level

    from the key word if.

    if(x > 0){

    t += 5;}

  • 7/30/2019 Computer Science 1302

    10/111

    1010

    THE ifSTATEMENT

    Flowchart for ifStatement

    if(x > 0){

    t += 5;}

    x > 0

    false

    true

    t = t + 5

  • 7/30/2019 Computer Science 1302

    11/111

    1111

    THE ifSTATEMENT

    The following statement specifies that the messageError:

    Invalid weight entered. is to be displayed on a line on the

    computer screen only ifweightis less than or equal to zero.

    if (weight

  • 7/30/2019 Computer Science 1302

    12/111

    1212

    THE ifSTATEMENT

    The following statement specifies that senioris to beassigned the value true ifage is greater than or equal tosixty-two.

    senior = false;

    if(age >=62){

    senior = true;}

  • 7/30/2019 Computer Science 1302

    13/111

  • 7/30/2019 Computer Science 1302

    14/111

    1414

    THE ifSTATEMENT

    Without the braces, the value of the conditional expression

    controls only the execution of the statement that

    immediately follows it.

    It is recommended that you enclose a single conditionallyexecuted statement in braces. Without the braces, if another

    statement is inserted between the conditional expression and

    the conditionally executed statement the second statementisdisconnected from the conditional expression and will

    execute regardless of the value of conditional expression.

  • 7/30/2019 Computer Science 1302

    15/111

    1515

    THE ifSTATEMENT

    The statement below specifies that if the value of the variable ch1 is equal to the

    character S, the following actions are to be taken in the order given:

    1. The value of the variable i is to be multiplied by .15 and the result obtained isassigned to the variablex.

    2. The value in the variablez is to be reduced by the value in the variablex.3. 10000 is to be added to the value of the variablez and the resulting value is to

    be assigned to the variabley

    4. The value of the variabley is to be displayed on the computer screen after themessage y is .

    if(ch1 == 'S'){

    x = i * .15;z -= x;y = z + 10000;System.out.println("y is " + y);

    }

  • 7/30/2019 Computer Science 1302

    16/111

    1616

    THE ifSTATEMENT

    If you forget the braces, the conditionally executed statement is x = i * .15.The other statements are executed regardless of the value ofch1. The

    indentation is for the human reader. The compiler ignores spaces, tabs, and

    newlines that are not inside quotation marks.

    if(ch1 == 'S')x = i * .15;z -= x;y = z + 10000;System.out.println("y is " + y);

    is equivalent to:

    if(ch1 == 'S')x = i * .15;

    z -= x;y = z + 10000;

    System.out.println("y is " + y);

  • 7/30/2019 Computer Science 1302

    17/111

    1717

    THE if/else STATEMENT

    If we want one set of statements to be executed if a condition is true

    and another set of statements to be executed if the condition isfalse,

    we can use an if/else statement.

    The general form of an if/else statement is as follows:

    if (Boolean expression){

    // if block

    statement(s);}else{

    // else block

    statement(s);

    }

  • 7/30/2019 Computer Science 1302

    18/111

    1818

    THE if/else STATEMENT

    The parenthesized conditional expression following the key word ifis evaluated. Ifthe expression evaluates to true, the statement(s) in the ifblock are executed andthen execution continues with the statement that follows the else block. If theconditional expression isfalse, the statement(s) in the else block are executed andthen execution continues with the statement that follows the else block

    if (Boolean expression){

    // if block

    statement(s);}else{

    // else block

    statement(s);}

  • 7/30/2019 Computer Science 1302

    19/111

    1919

    THE if/else STATEMENT

    The following statement specifies that as long as denominatoris notequal to 0.0 the division is to be performed and the result of thedivision is to be displayed on the computer screen. If however,denominatoris equal to 0.0, the error messageError: cannot divide

    by zero. is to be displayed on the computer screen.

    if(denominator != 0.0){

    result = numerator / denominator;System.out.println(numerator + " / " + denominator + " is " + result);

    }else{

    System.out.println("\nError: cannot divide by zero.");}

  • 7/30/2019 Computer Science 1302

    20/111

    2020

    THE if/else STATEMENT

    Division by Zero

    Programmers must write code to guard against division by zero.

    Dividing by zero is a logical error. Dividing an integer by the

    integer zero, causes a program to terminate/crash.

    if(denominator != 0.0)

    {result = numerator / denominator;System.out.println(numerator + " / " + denominator + " is " + result);

    }else{

    System.out.println("\nError: cannot divide by zero.");}

  • 7/30/2019 Computer Science 1302

    21/111

    2121

    THE if/else STATEMENT

    Notice that there is not a semicolon after the parenthesized Booleanexpression or the key word else in an if/else statement.

    When a single statement is to be conditionally executed the braces

    can be omitted. Again, this is not recommended.

    if(denominator != 0.0){

    result = numerator / denominator;System.out.println(numerator + " / " + denominator + " is " + result);

    }else{

    System.out.println("\nError: cannot divide by zero.");}

    There should not be semicolons here!

  • 7/30/2019 Computer Science 1302

    22/111

    2222

    THE if/else STATEMENT

    It is good programming style to have the else corresponding to an ifat thesame level of indentation. In addition, the block that is executed if theconditional expression is true should begin on the line below theconditional expression and the statements should be indented one levelfrom the key word if. The block that is executed if the conditional

    expression isfalse should begin on the line below the key word else and thestatements in this block should be indented one level from the key wordelse.

    if(denominator != 0.0){

    result = numerator / denominator;System.out.println(numerator + " / " + denominator + " is " + result);

    }else{

    System.out.println("\nError: cannot divide by zero.");

    }

  • 7/30/2019 Computer Science 1302

    23/111

    2323

    THE if/else STATEMENT

    Flowchart for if/else Statement

    if(denominator != 0.0){

    result = numerator / denominator;System.out.println(numerator + " / " + denominator + " is " + result);

    }else{

    System.out.println("\nError: cannot divide by zero.");

    }

    denominator!= 0.0

    false true

    result = numerator /denominator

    Display anerror message

    Display theresult

  • 7/30/2019 Computer Science 1302

    24/111

    24

    *** See the program CircleAreaWInputValid.java which isavailable on webct.

  • 7/30/2019 Computer Science 1302

    25/111

    25

    Problem:

    Write a program to calculate and display the gross pay of anhourly employee for one week. For time worked over forty

    hours the employee is paid at 1 times his/her normal hourly

    pay rate.

  • 7/30/2019 Computer Science 1302

    26/111

    26

    Beginning the analysis of the problem, the programmer might

    try to list the purpose, inputs, processing, and outputs of the

    program to clarify the problem.

    Purpose To calculate and display an hourly employees weekly gross

    pay

    Inputs Number of hours worked, hourly pay rate

    Processing Multiply the number of hours worked less than or equal to forty

    hours by the hourly pay rate to find the regular pay. Multiply

    the hours worked over forty hours by 1 times the pay rate to

    find overtime pay. The gross pay is the regular pay plus the

    overtime pay.

    Output Display a message indicating the gross pay for the employee

  • 7/30/2019 Computer Science 1302

    27/111

    27

    Next, the programmer might use a tool such as pseudocode or a

    flowchart to develop an algorithm to solve the problem.

    Sample pseudocode for the problem defined above:

    Get the hours worked

    Get the hourly pay rate

    Set overtime pay to zero

    If the number of hours worked is less than or equal to forty

    Multiply hours worked by the pay rate to find regular pay

    Else

    Multiply forty by the pay rate to find regular pay

    Multiply the difference between hours worked and forty by 1 times the

    pay rate to find overtime pay

    Add regular pay and overtime pay to find gross payDisplay the gross pay

  • 7/30/2019 Computer Science 1302

    28/111

    28

    Sample flowchart for the problem defined above:START

    Get hours

    worked

    Get hourly

    pay rate

    Set overtime pay to zero

    Display gross

    pay

    hours

    worked

  • 7/30/2019 Computer Science 1302

    29/111

    29

    Remember part of the design process is the design of the test

    plan.

  • 7/30/2019 Computer Science 1302

    30/111

    30

    Sample test plan for the problem defined above:

    Inputs Expected Output Value

    Hours worked = 40Hourly pay = 10 $400.00

    Hours worked = 41Hourly pay = 20.00 $830.00

    Hours worked = 0Hourly pay = 25.00 $0.00

    Hours worked = 10Hourly pay = 7.55 $75.50

    Hours worked = 29.75Hourly pay = 10.23 $304.34

    Hours worked = 50.5Hourly pay = 20.48 $1141.76

    Hours worked = 40Hourly pay = 0 Error

    Hours worked = 38.5

    Hourly pay = -10.00 Error

    Hours worked = - 40Hourly pay = 5.00 Error

    Hours worked = 168Hourly pay = 8.30 $1925.60

    Hours worked = 169

    Hourly pay = 10.00 Error

  • 7/30/2019 Computer Science 1302

    31/111

    31

    *** See the program CalculateGrossPay.java on webct.

  • 7/30/2019 Computer Science 1302

    32/111

    3232

    THE if/else ifSTATEMENT

    We can create a mutli-way decision structure by constructing a chain ofif/else statements.

  • 7/30/2019 Computer Science 1302

    33/111

    3333

    THE if/else ifSTATEMENT

    Typically this type of decision is written as follows:

    if (Boolean expression){

    statement(s)

    }else if (Boolean expression){

    statement(s)}else if (Boolean expression) // Include as many else ifs as needed to encode alternatives{

    statement(s)}else{

    statement(s)}

  • 7/30/2019 Computer Science 1302

    34/111

    3434

    THE if/else ifSTATEMENT

    if (Boolean expression){

    statement(s)}else if (Boolean expression){

    statement(s)

    }else if (Boolean expression) // Include as many else ifs as needed to encode alternatives{

    statement(s)}else{

    statement(s)

    }

    When you chain the if/elses in this way, the second ifis actually in the else portion ofthe first if/else; the third ifis actually in the else portion of the second if/else statement

  • 7/30/2019 Computer Science 1302

    35/111

    3535

    THE if/else ifSTATEMENT

    if (Boolean expression){

    statement(s)}else if (Boolean expression){

    statement(s)

    }else if (Boolean expression) // Include as many else ifs as needed to encode alternatives{

    statement(s)}else{

    statement(s)

    }

    When this type of statement is executed, the various conditional expressions are evaluated inorder, from top to bottom, until the first, if any, that evaluates to true is found. The conditionallyexecuted statement or block that follows the first true expression is executed and then executioncontinues after the last conditionally executed statement. Execution will only get to a particularconditional expression, if all the previous conditional expressions arefalse.

  • 7/30/2019 Computer Science 1302

    36/111

    3636

    THE if/else ifSTATEMENT

    if (Boolean expression){

    statement(s)}else if (Boolean expression){

    statement(s)

    }else if (Boolean expression) // Include as many else ifs as needed to encode alternatives{

    statement(s)}else{

    statement(s)

    }

    The trailing else is optional, it can be used to specify what is to be done if

    none of the conditional expressions are true.

  • 7/30/2019 Computer Science 1302

    37/111

    3737

    THE if/else ifSTATEMENT

    if (Boolean expression){

    statement(s)}else if (Boolean expression){

    statement(s)

    }else if (Boolean expression) // Include as many else ifs as needed to encode alternatives{

    statement(s)}else{

    statement(s)

    }

    We use a special indentation style to encode a multi-way decision. Noticethat in this case we are not lining up an else with its associated if. We aredoing this to visually convey that we have a multi-way decision not a decisionbetween two alternatives.

  • 7/30/2019 Computer Science 1302

    38/111

    38

    *** See the programAssignGrades.java

    The first if statement filters out all the grades less than 60. The secondif statement executes only if the first test is false; when the second if

    statement executes, the value of grade is 60 or greater. The second if

    statement filters out all the grades 60 through 69 inclusive. The third if

    statement executes only if the first two tests are false; when the third if

    statement executes, the value of grade is 70 or greater

  • 7/30/2019 Computer Science 1302

    39/111

    3939

    FLAGS

    A flag is a boolean variable that signals when some condition existsin a program. When the flag variable has the valuefalse it meansthe condition does not exist. When the flag variable is true it meansthe condition exists.

  • 7/30/2019 Computer Science 1302

    40/111

    40

    *** See the programAssignGradesUsesFlagVar.java

    In the programAssignGradesUsesFlagVar.java, the variable

    named validGrade is a flag variable that is used to signal that

    a valid grade was entered.

  • 7/30/2019 Computer Science 1302

    41/111

    4141

    NESTED ifSTATEMENTS

    There are no restrictions on what statements can be inside theconditionally executed block(s) ofifor if/else statements. Aconditionally executed block may contain an ifor if/elsestatement.

    We say that an ifor an if/else statement is nested, if it is inside aconditionally executed block of another ifor if/else statement.

    An else is associated with the most recent unmatched ifin thesame block. Remember, indentation does not matter to the

    compiler.

  • 7/30/2019 Computer Science 1302

    42/111

    42

    *** See the program CalculateGrossPayWInputValid.java

  • 7/30/2019 Computer Science 1302

    43/111

    4343

    LOGICAL OPERATORS

    We can combine two boolean expressions into a single expression

    using the logical operators && (AND) or | | (OR).

  • 7/30/2019 Computer Science 1302

    44/111

    4444

    LOGICAL OPERATORS

    The && Operator

    The && operator, the logical AND operator, is a binary operatorthat takes two boolean expressions as its operands and combines

    them into a boolean expression that has the value true, only

    when both of the operands have the value true.

    If either or both of the operands of the && operator are false, theexpression has the value false.

    The && operator has lower precedence than the arithmetic andrelational operators, but higher precedence than the assignment

    operators.

    *** See Appendix C of the text on the CD-ROM that came with

    the text

  • 7/30/2019 Computer Science 1302

    45/111

    4545

    LOGICAL OPERATORS

    The && Operator

    if(gameOver == true && player1Score > player2Score){

    System.out.println("Player 1 is the winner!");}

    The conditional expression, (gameOver == true && player1Score >player2Score), is true and Player 1 is the winner! is displayed, only

    ifbothgameOveris equal to true andplayer1Score is greater than

    layer2Score.

  • 7/30/2019 Computer Science 1302

    46/111

    4646

    LOGICAL OPERATORS

    The && Operator

    if(gameOver == true && player1Score > player2Score){

    System.out.println("Player 1 is the winner!");}

    The statement above is equivalent to:

    if(gameOver && player1Score > player2Score){

    System.out.println("Player 1 is the winner!");}

  • 7/30/2019 Computer Science 1302

    47/111

    4747

    LOGICAL OPERATORS

    The && Operator

    If left operand of a logical && operator is false, the expression

    on the right will not even be evaluated. This is called short-circuit evaluation. It is a waste of processor time to evaluate theexpression that is the right operand.

    if(gameOver == true && player1Score > player2Score){

    System.out.println("Player 1 is the winner!");}

  • 7/30/2019 Computer Science 1302

    48/111

    4848

    LOGICAL OPERATORS

    The && Operator

    The statement below specifies that the value in the variablez isincreased by 1 and the value in the variable w is decreased by 2,when bothch1 contains the Unicode value of the letter A andy hassome value greater than 3.0.

    if (ch1 == A && y > 3.0){

    z += 1;

    w = 2;}

  • 7/30/2019 Computer Science 1302

    49/111

    4949

    LOGICAL OPERATORS

    The && Operator

    if (ch1 == A && y > 3.0){

    z += 1;

    w = 2;}

    The statement above is equivalent to:

    if (ch1 == A){

    if (y > 3.0){

    z += 1;

    w = 2;}

    }

  • 7/30/2019 Computer Science 1302

    50/111

    5050

    LOGICAL OPERATORS

    The && Operator

    The && operator is useful for checking that a value is inside a

    numeric range.

  • 7/30/2019 Computer Science 1302

    51/111

    5151

    LOGICAL OPERATORS

    The && Operator

    int month = 0;

    System.out.print("Enter the number of the month [JAN = 1, FEB = 2, etc.]: ");month = keyboard.nextInt( );

    if(month >= 1 && month

  • 7/30/2019 Computer Science 1302

    52/111

    5252

    LOGICAL OPERATORS

    The && Operator

    if(month >= 1 && month

  • 7/30/2019 Computer Science 1302

    53/111

    5353

    LOGICAL OPERATORS

    The && Operator

    To test whether a value is inside a range, determine if it is both> or >= to the lower end of the range AND (&&) < or or >= and < or = 1 && month

  • 7/30/2019 Computer Science 1302

    54/111

    5454

    LOGICAL OPERATORS

    The && Operator

    We could check if we had an uppercase letter in the charvariablech1 by writing:

    if(ch1 >= 'A' && ch1

  • 7/30/2019 Computer Science 1302

    55/111

    5555

    LOGICAL OPERATORS

    The || Operator

    The || operator, the logical OR operator, is a binary operator thattakes two boolean expressions as its operands and combines

    them into a boolean expression that has the value true, when

    either or both of its operands are true. In other words, the ||

    operation is true ifat least one of its operands is true.

    The || operation is false only when both of the operands of the ||are false.

    The || operator has lower precedence than the && operator, buthigher precedence than the assignment operators.

    *** See Appendix C of the text on the CD-ROM that came

    with the text

  • 7/30/2019 Computer Science 1302

    56/111

    5656

    LOGICAL OPERATORS

    The || Operator

    if (weight < 0 || height < 0){

    goodData = false;}

    The conditional expression, (weight < 0 || height < 0), is true and

    goodData is assigned the value false, if at least one of weight < 0OR height < 0 are true.

  • 7/30/2019 Computer Science 1302

    57/111

    5757

    LOGICAL OPERATORS

    The || Operator

    If the expression on the left side of the || operator is true, the

    expression on the right will not be evaluated. Again, this is calledshort-circuit evaluation.

    if (weight < 0 || height < 0){

    goodData = false;}

  • 7/30/2019 Computer Science 1302

    58/111

    5858

    LOGICAL OPERATORS

    The || Operator

    The || operator is useful for checking whether a value is outside

    a numeric range.

  • 7/30/2019 Computer Science 1302

    59/111

    5959

    LOGICAL OPERATORS

    The || Operator

    In the segment below, the conditional expression (month < 1 ||

    month > 12) is true and theprintln statement is executed if

    month is less than 1 ORmonth is greater than 12:

    if (month < 1 || month > 12){

    System.out.println("\nError: The month should be a value from 1 through 12.");}

  • 7/30/2019 Computer Science 1302

    60/111

    6060

    LOGICAL OPERATORS

    The || Operator

    To test whether a value is outside a range, determine if it is eitherless than the lower end of the range OR (||) greater than the upperend of the range.

    if (month < 1 || month > 12){

    System.out.println("\nError: The month should be a value from 1 through 12.");}

  • 7/30/2019 Computer Science 1302

    61/111

  • 7/30/2019 Computer Science 1302

    62/111

    6262

    LOGICAL OPERATORS

    The ! Operator

    The ! operator, the logical complement operator or the notoperator, is a unary operator that complements the logical value

    of the boolean expression that is its operand.

    The ! operator reverses its operands truth or falsehood.

    If

    expressionhas the value true, !(

    expression) is false.

    Ifexpression has the value false, !(expression) is true.

  • 7/30/2019 Computer Science 1302

    63/111

    6363

    LOGICAL OPERATORS

    The ! Operator

    double radius = 1, area = 1;

    Scanner keyboard = new Scanner(System.in);

    System.out.print("Enter the radius of the circle: ");radius = keyboard.nextDouble( );

    if(!(radius

  • 7/30/2019 Computer Science 1302

    64/111

    6464

    LOGICAL OPERATORS

    The ! Operator

    Equivalently, the statement below could begin if(radius > 0)

    if(!(radius

  • 7/30/2019 Computer Science 1302

    65/111

    6565

    LOGICAL OPERATORS

    The ! Operator

    The ! operator has relatively high precedence. It has higherprecedence than the arithmetic, relational, and other logicaloperators.

    *** See Appendix C of the text on the CD-ROM that came with

    the text

  • 7/30/2019 Computer Science 1302

    66/111

    6666

    LOGICAL OPERATORS

    The ! Operator

    (!radius

  • 7/30/2019 Computer Science 1302

    67/111

    6767

    LOGICAL OPERATORS

    The ! Operator

    We could write:

    if(!error){

    // Put statements here that you want executed when error is false// When error is true these statements are skipped.

    .

    .

    .}

    (error == false) is equivalent to the conditional expression in the

    statement above.

  • 7/30/2019 Computer Science 1302

    68/111

    68

    Suppose we had already created the pseudocode for a program to

    get a numeric grade earned on assignment from the user and assign

    the letter grade corresponding to the numeric grade using the scalebelow, and then we learned that valid grades are in the range 0

    through 100.

    grades 59 letter grade of F

    60 grades 69 letter grade of D70 grades 79 letter grade of C

    80 grades 89 letter grade of B

    90 grades letter grade of A

  • 7/30/2019 Computer Science 1302

    69/111

    69

    Lets modify the pseudocode and program so that letter grades are

    only assigned for valid numeric grades and an appropriate error

    message is displayed if an invalid numeric grade is entered.

    Pseudocode for the programAssignGrades.java

    Get the number of points earned on the assignment and store this in grade

    If grade < 60Set letterGrade to F

    Else if grade < 70Set letterGrade to D

    Else if grade < 80Set letterGrade to C

    Else if grade < 90

    Set letterGrade to BElse

    Set letterGrade to A

    Display the letter Grade

  • 7/30/2019 Computer Science 1302

    70/111

  • 7/30/2019 Computer Science 1302

    71/111

    71

    *** See the programAssignGradesUsesLogOper.java

  • 7/30/2019 Computer Science 1302

    72/111

    7272

    COMPARING String OBJECTS

    You cannot use the relational operators >, =, and

  • 7/30/2019 Computer Science 1302

    73/111

    7373

    COMPARING String OBJECTS

    For example, when the segment below is executed, the conditionalexpression, (day == enteredDay), always evaluates tofalse andThe current day is not Monday. is always displayed in the dialogbox, because the objects referenced by day and enteredDay are indifferent memory locations (i.e. they have different memory

    addresses).

    String day = "Monday";String enteredDay;

    enteredDay = JOptionPane.showInputDialog("Enter the current day of the week.");

    if(day == enteredDay){

    JOptionPane.showMessageDialog(null, "The current day is Monday.");}else{

    JOptionPane.showMessageDialog(null, "The current day is not Monday.");

    }

  • 7/30/2019 Computer Science 1302

    74/111

    7474

    COMPARING String OBJECTS

    String day = "Monday";String enteredDay;

    enteredDay = JOptionPane.showInputDialog("Enter the current day of the week.");

    if(day == enteredDay){

    JOptionPane.showMessageDialog(null, "The current day is Monday.");

    }else{

    JOptionPane.showMessageDialog(null, "The current day is not Monday.");}

  • 7/30/2019 Computer Science 1302

    75/111

    7575

    COMPARING String OBJECTS

    The equals( ) Method of a String Object

    To compare the contents of two String objects to see if they containthe same string, use the String objects equals( ) method.

    The general form of a call to the method is:

    StringReference.equals(OtherString)

    StringReference is a variable that references a String object

    and OtherString is either a variable that references a String object or

    a string literal.

    The equals( ) method returns the value true if the two strings are

    equal and the valuefalse if they are not equal.

  • 7/30/2019 Computer Science 1302

    76/111

    7676

    COMPARING String OBJECTS

    The equals( ) Method of a String Object

    The conditional expression in the segment below compares thecontents of the String objects that are referenced by day and

    enteredDay. If the strings are equal, the conditional expression is

    true, and The current day is Monday. is displayed. If the strings are

    not equal, the conditional expression isfalse, and The current day is

    not Monday. is displayed.

    String day = "Monday";String enteredDay;

    enteredDay = JOptionPane.showInputDialog("Enter the current day of the week.");

    if(day.equals(enteredDay)){

    JOptionPane.showMessageDialog(null, "The current day is Monday.");}else{

    JOptionPane.showMessageDialog(null, "The current day is not Monday.");

    }

  • 7/30/2019 Computer Science 1302

    77/111

    7777

    COMPARING String OBJECTS

    The equals( ) Method of a String Object

    String day = "Monday";String enteredDay;

    enteredDay = JOptionPane.showInputDialog("Enter the current day of the week.");

    if(day.equals(enteredDay)){

    JOptionPane.showMessageDialog(null, "The current day is Monday.");

    }else{

    JOptionPane.showMessageDialog(null, "The current day is not Monday.");}

  • 7/30/2019 Computer Science 1302

    78/111

  • 7/30/2019 Computer Science 1302

    79/111

    7979

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    Objects of the String class also have a method called compareTo( ). Wecan use this method to determine if one string is greater than, equal to, or

    less than another string.

    The general form of a call to the method is:

    StringReference.compareTo(OtherString)

    StringReference is a variable that references a String object and

    OtherString is either a variable that references a String object or a string

    literal.

  • 7/30/2019 Computer Science 1302

    80/111

    8080

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    StringReference.compareTo(OtherString)

    The compareTo( ) method returns an integer value. The value returned

    indicates what relationship exists between the two strings:

    When the string referenced by StringReference islexicographically less than OtherString the compareTo( ) method

    returns a negative value.

    When the string referenced by StringReference is

    lexicographically equivalent to OtherString the compareTo( )

    method returns zero. When the string referenced by StringReference is

    lexicographically greater than OtherString the compareTo( )

    method returns a positive value.

  • 7/30/2019 Computer Science 1302

    81/111

    8181

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    StringReference.compareTo(OtherString)

    The compareTo( )method compares the two strings character bycharacter (comparing the Unicode values of each character),

    when the same Unicode is found, compareTo( ) moves on to the

    next character. When compareTo( ) finds two characters with different

    Unicodes in the same relative position, it stops the comparison.

    If the Unicode code of the differing character of

    StringReference is less than the code of the character in

    OtherString, compareTo( ) returns a negative value.

    If the Unicode code of the differing character of

    StringReference is greater than the code of the character in

    OtherString, compareTo( ) returns a positive value.

  • 7/30/2019 Computer Science 1302

    82/111

  • 7/30/2019 Computer Science 1302

    83/111

    8383

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    What is the value assigned to twhen the following statements areexecuted? ___________

    String string1 = "Mars";String string2 = "Mercury";

    int t = string1.compareTo(string2);

  • 7/30/2019 Computer Science 1302

    84/111

    8484

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    What is the value assigned to v when the following statements areexecuted? ____________

    String string3 = "catapillar";String string4 = "cat";

    int v = string3.compareTo(string4);

  • 7/30/2019 Computer Science 1302

    85/111

    8585

    COMPARING String OBJECTS

    ThecompareTo( ) Method of a String Object

    What is the value assigned to w when the following statements areexecuted? _____________

    String string5 = "water";String string6 = "Water";

    int w = string5.compareTo(string6);

  • 7/30/2019 Computer Science 1302

    86/111

    8686

    COMPARING String OBJECTS

    The equals( ) and compareTo( ) methods perform case sensitivecomparisons.

    Objects of the String class also have methodsequalsIgnoreCase( )and compareToIgnoreCase( ).

    The equalsIgnoreCase( ) method works like the equals( )method, but the case of the characters in the strings are ignored

    in the equalsIgnoreCase( ) version.

    The compareToIgnoreCase( ) method works like thecompareTo( ) method, but the case of the characters in the

    strings are ignored in the compareToIgnoreCase( ) version.

  • 7/30/2019 Computer Science 1302

    87/111

    8787

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    We can use theDecimalFormatclass to control the way floating-point numbers are displayed.

    TheDecimalFormatclass is part of the Java API, but it is notavailable to your program unless you include the followingimport statement before the class definitions in your source file.

    import java.text.DecimalFormat;

  • 7/30/2019 Computer Science 1302

    88/111

    8888

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    To use theDecimalFormatclass we create an object or instance ofthis class in memory using the new operator.

    DecimalFormat format = new DecimalFormat("000.#");

  • 7/30/2019 Computer Science 1302

    89/111

    8989

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    On the left side of the assignment operator, we are declaring areference variable namedformat.

    Variable name

  • 7/30/2019 Computer Science 1302

    90/111

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    91/111

    9191

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    On the right side of the assignment operator, we use the newoperator to instantiate an object of theDecimalFormatclass.

    When an object is created, a special method called a constructor is

    executed.

    Instatiates an object inmemory

  • 7/30/2019 Computer Science 1302

    92/111

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    93/111

    9393

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    The new operator returns the address of the object that is created inmemory and we are assigning this to the reference variableformat.

    The address of the object

    is assigned to thereference variable.

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    94/111

    9494

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    The formatting pattern shows how values formatted using thisobject will be displayed.

    The characters before the decimal point specify the minimum

    number of digits that should be displayed before the decimalpoint.

    If there are more actual digits before the decimal point they willbe displayed regardless of the pattern.

    This is theformatting

    pattern

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    95/111

    9595

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    The characters after the decimal point show the maximumnumber of digits to be displayed after the decimal point.

    If there are more digits after the decimal point than are specifiedthe value will be rounded to the specified number of digits.

    This is theformatting

    pattern

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    96/111

    9696

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    The 0 character represents a required digit if there is no digitin the position a zero is displayed

    The # character represents an optional digit if there is no digitin the position or the digit is a zero, no digit is displayed

    This is theformatting

    pattern

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    97/111

    9797

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    DecimalFormat format = new DecimalFormat("000.#");

    The pattern, 000.#, means display at least three digits to theleft of the decimal point and a maximum of one digit to the right

    of the decimal point. Leading zeroes will be included if necessary to get the three

    digits to the left of the decimal point.

    If there is a nonzero fractional portion it will be rounded to onedigit to the right of the decimal point. If there is no fractional

    portion, none will be displayed.

    For example, if the value 1234.56 was formatted according to thepattern above. The value would become 1234.6.

    FORMATTING FLOATING POINT VALUES

  • 7/30/2019 Computer Science 1302

    98/111

    9898

    FORMATTING FLOATING-POINT VALUES

    WITH THEDecimalFormat Class

    Once you have created aDecimalFormatobject, you can call itsformat( ) method to format the value that is passed as an

    argument to the method.

    Theformat( ) method creates a String object containing thecharacters corresponding to the formatted number and

    returns the address of the String object.

    DecimalFormat format1 = new DecimalFormat("000.#");

    double f = 12.0;

    String formattedNumber;

    formattedNumber = format1.format(f);System.out.println(formattedNumber); // Displays 012

  • 7/30/2019 Computer Science 1302

    99/111

    99

    *** See the programDemoDecForm.java which is available

    on webct

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    100/111

    100100

    THEswitch STATEMENT

    The switch statement is a decision structure that allows you to specify abranch to a segment of code based upon matching the value of the testexpression with a constant expression following the keyword case at thebeginning of the segment.

    switch (test expression)

    {case constant expression:

    optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    101/111

    101101

    THEswitch STATEMENT

    The switch statement begins with the keyword switch, followedby a parenthesizedtest expression. This test expression mustevaluate to a value of type int, short, byte, or char.

    switch (test expression){

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    102/111

    102102

    THEswitch STATEMENT

    A block of case statements follows the test expression. Each ofthe case statements begins with the keyword case and is

    followed by a constant expression and a colon.

    switch (test expression){

    case constant expression:

    optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    A colon is at the

    end of the case

    label.

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    103/111

    103103

    THEswitch STATEMENT

    The constant expression must have a value of type int, short,byte, or char.

    switch (test expression){

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:

    optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    104/111

    104104

    THEswitch STATEMENT

    Any number of Java programming statements may appear afterthis case label.

    switch (test expression){

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    105/111

    105105

    THEswitch STATEMENT

    The parenthesized test expression is evaluated, the value of thisexpression is compared with the constant expressions in the

    cases, if a matching expression is found, execution branches to

    the statement(s) following the label in the matching case.

    switch (test expression)

    {case constant expression:

    optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    106/111

    106106

    THEswitch STATEMENT

    Once the running program has branched to a particular case, thestatements for that case and all subsequent cases will be executedunless a breakstatement is used breakout of the switchstatement.

    switch (test expression)

    {case constant expression:

    optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:optional statement(s)

    default:statement(s) // Default case is optional

    }

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    107/111

    107107

    THEswitch STATEMENT

    The breakstatement causes a break/exit from the block of theswitch statement to the first statement following the switch block.

    switch (test expression){

    case constant expression:

    optional statement(s)

    case constant expression:optional statement(s)

    case constant expression:

    optional statement(s)

    default:statement(s) // Default case is optional

    }

    The switch block isbetween the braces.

  • 7/30/2019 Computer Science 1302

    108/111

  • 7/30/2019 Computer Science 1302

    109/111

    109109

    *** See the program SwitchDemo.java from the text

    This same program could have been written using an if/elseifinstead

    of the switch statement.

    Try taking out the breaks and see what happens!!!

    THE switch STATEMENT

  • 7/30/2019 Computer Science 1302

    110/111

    110110

    THEswitch STATEMENT

    Not every if/else if statement can be converted to a switch statement.Decisions based on range of values are more easily specified using anif/elseif. It is difficult, if not impossible, to enumerate all the values in alarge range.

    What ifx is some integer type?What ifx is some floating-point type?

    if (x < 5){

    y = x;}else if (x

  • 7/30/2019 Computer Science 1302

    111/111

    *** See the program TicketPurchase.java which is availableon webct