Chapter Goals. 3.1 The if Statement. Contents 1/30/2013 DECISIONS

Similar documents
Java Coding 2. Decisions, decisions!

Chapter 5 Decisions. Big Java by Cay Horstmann Copyright 2009 by John Wiley & Sons. All rights reserved.

Branching and Boolean Expressions

Branching and Boolean Expressions

The if/else Statement

Computer Programming. Basic Control Flow - Decisions. Adapted from C++ for Everyone and Big C++ by Cay Horstmann, John Wiley & Sons

Topics. Chapter 5. Equality Operators

COMP 111. Introduction to Computer Science and Object-Oriented Programming

Chapter 4: Control Structures I

Selec%on and Decision Structures in Java: If Statements and Switch Statements CSC 121 Fall 2016 Howard Rosenthal

Computational Expression

Selec%on and Decision Structures in Java: If Statements and Switch Statements CSC 121 Spring 2016 Howard Rosenthal

Define a method vs. calling a method. Chapter Goals. Contents 1/21/13

Logic & program control part 2: Simple selection structures

Chapter Goals. Contents LOOPS

Accelerating Information Technology Innovation

Lecture Programming in C++ PART 1. By Assistant Professor Dr. Ali Kattan

Flow of Control. Flow of control The order in which statements are executed. Transfer of control

V2 2/4/ Ch Programming in C. Flow of Control. Flow of Control. Flow of control The order in which statements are executed

PLT Fall Shoo. Language Reference Manual

Programming: Java. Chapter Objectives. Control Structures. Chapter 4: Control Structures I. Program Design Including Data Structures

Slide 1 CS 170 Java Programming 1 The Switch Duration: 00:00:46 Advance mode: Auto

Flow of Control. Chapter 3

Key Concept: all programs can be broken down to a combination of one of the six instructions Assignment Statements can create variables to represent

Java Coding 3. Over & over again!

Motivations. Chapter 3: Selections and Conditionals. Relational Operators 8/31/18. Objectives. Problem: A Simple Math Learning Tool

Recognize the correct ordering of decisions in multiple branches Program simple and complex decision

Decision Structures. Lecture 3 MIT 12043, Fundamentals of Programming By: S. Sabraz Nawaz

Flow of Control. Chapter 3. Chapter 3 1

School of Computer Science CPS109 Course Notes 5 Alexander Ferworn Updated Fall 15

Flow of Control. Chapter 3

4.1. Chapter 4: Simple Program Scheme. Simple Program Scheme. Relational Operators. So far our programs follow a simple scheme

SELECTION. (Chapter 2)

Control Structures in Java if-else and switch

Important Java terminology

Loops and Expression Types

COMP Primitive and Class Types. Yi Hong May 14, 2015

Selection Statements. Pseudocode

CS 106 Introduction to Computer Science I

Module 3 SELECTION STRUCTURES 2/15/19 CSE 1321 MODULE 3 1

Lecture 5 Tao Wang 1

LECTURE 04 MAKING DECISIONS

FUNDAMENTAL DATA TYPES

Motivating Examples (1.1) Selections. Motivating Examples (1.2) Learning Outcomes. EECS1022: Programming for Mobile Computing Winter 2018

Honors Computer Programming 1-2. Chapter 5 Exam Prep

Decision Structures. Lesson 03 MIT 11053, Fundamentals of Programming

AP CS Unit 3: Control Structures Notes

Chapter 4: Making Decisions

McGill University School of Computer Science COMP-202A Introduction to Computing 1

Conditional Programming

Object-Oriented Programming

Chapter 4: Making Decisions

Flow Control. CSC215 Lecture

Conditional Execution

Control Flow. COMS W1007 Introduction to Computer Science. Christopher Conway 3 June 2003

COMP-202: Foundations of Programming. Lecture 3: Boolean, Mathematical Expressions, and Flow Control Sandeep Manjanna, Summer 2015

Introduction to OOP with Java. Instructor: AbuKhleif, Mohammad Noor Sep 2017

Conditional Statement

cis20.1 design and implementation of software applications I fall 2007 lecture # I.2 topics: introduction to java, part 1

Chapter 3 Selections. Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved.

Making Decisions In Python

BIT Java Programming. Sem 1 Session 2011/12. Chapter 2 JAVA. basic

Conditionals and Loops

Boolean Expressions (Conditions)

Computer Programming, I. Laboratory Manual. Experiment #3. Selections

Mobile Computing Professor Pushpendra Singh Indraprastha Institute of Information Technology Delhi Java Basics Lecture 02

Chapter 4: Making Decisions. Copyright 2012 Pearson Education, Inc. Sunday, September 7, 14

CSE 1223: Introduction to Computer Programming in Java Chapter 3 Branching

5. Selection: If and Switch Controls

Introduction to Programming Using Java (98-388)

Flow of Control. Branching Loops exit(n) method Boolean data type and expressions

Lecture 05 I/O statements Printf, Scanf Simple statements, Compound statements

CS 302: Introduction to Programming

Lecture 6. Assignments. Summary - Variables. Summary Program Parts 1/29/18. Reading: 3.1, 3.2, 3.3, 3.4

In Java, data type boolean is used to represent Boolean data. Each boolean constant or variable can contain one of two values: true or false.

CHAPTER 5 FLOW OF CONTROL

Programming Logic and Design Sixth Edition

Chapter 4: Conditionals and Loops

Visual C# Instructor s Manual Table of Contents

Decisions. Arizona State University 1

Java. Programming: Chapter Objectives. Why Is Repetition Needed? Chapter 5: Control Structures II. Program Design Including Data Structures

Introduction to Java & Fundamental Data Types

Chapter 3. Flow of Control. Branching Loops exit(n) method Boolean data type and expressions

Expressions and Data Types CSC 121 Spring 2015 Howard Rosenthal

Chapter 3 Selection Statements

Programming with Java

Chapter 3. More Flow of Control. Copyright 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Introduction to Java

Interpreted vs Compiled. Java Compile. Classes, Objects, and Methods. Hello World 10/6/2016. Python Interpreted. Java Compiled

Control Structures in Java if-else and switch

Administration. Conditional Statements. Agenda. Syntax. Flow of control. Lab 2 due now on floppy Lab 3 due tomorrow via FTP

Chapter 4 Fundamental Data Types. Big Java by Cay Horstmann Copyright 2009 by John Wiley & Sons. All rights reserved.

Decision Control Structure. Rab Nawaz Jadoon DCS. Assistant Professor. Department of Computer Science. COMSATS IIT, Abbottabad Pakistan

Full file at

Selections. EECS1021: Object Oriented Programming: from Sensors to Actuators Winter 2019 CHEN-WEI WANG

DEPARTMENT OF MATHS, MJ COLLEGE

Chapter 2: Using Data

BITG 1223: Selection Control Structure by: ZARITA (FTMK) LECTURE 4 (Sem 1, 16/17)

Oct Decision Structures cont d

Review. Primitive Data Types & Variables. String Mathematical operators: + - * / % Comparison: < > <= >= == int, long float, double boolean char

Transcription:

CHAPTER DECISIONS 3 Chapter Goals To implement decisions using the if statement To compare integers, floating-point numbers, and Strings To write statements using the Boolean data type To develop strategies for testing your programs To validate user inputs In this chapter, you will learn how to program simple and complex decisions. You will apply what you learn to the task of checking user input. Slides by Donald W. Smith TechNeTrain.com Final Draft Oct 15, 2011 Page 2 Contents The if Statement Comparing Numbers and Strings Multiple Alternatives Nested Branches Problem Solving: Flowcharts Problem Solving: Test Cases Boolean Variables and Operators Application: Input Validation Page 3 3.1 The if Statement A computer program often needs to make decisions based on the input, or circumstances For example, buildings often skip the 13 th floor, and elevators should too The 14 th floor is really the 13 th floor So every floor above 12 is really floor - 1 If floor > 12, Actual floor = floor - 1 The two keywords of the if statement are: if else The if statement allows a program to carry out different actions depending on the nature of the data to be processed. Page 4 1

Flowchart for if statement An if statement lets a program carry out actions only when the condition is met. if (amount <= balance) balance = balance amount; Flowchart for if-else statement if (amount <= balance) balance = balance amount; else balance = balance OVERDRAFT_PENALTY; Does the following achieve the same goal? If (amount <= balance) balance = balance amount; If (amount > balance) balance = balance OVERDRAFY_PENALTY; Page 5 Page 6 Tips On Using Braces Use braces for block statements: if (amount <= balance) balance = balance - amount; penalty = 0.0; It is a good idea to use braces even there is only one statement in the if-branch/else-branch to make the statement more readable. Page 9 Common Error 3.1 A semicolon after an if statement : if (floor > 13) ; floor--; The if statement has an empty body. The body (between the curly braces) will always be executed in this case floor=1; what is that value of floor after the if-statement? floor=15; what is the value of floor after the if-statement? Page 11 2

Short-hand: The Conditional Operator Condition True branch False branch actualfloor = floor > 13? floor - 1 : floor; Includes all parts of an if-else clause, but uses:? To begin the true branch : To end the true branch and start the false branch 3.2 Comparing Numbers and Strings Every if statement has a condition. Relational operator used to compares two integers: if (floor > 13).. if (floor >= 13).. if (floor < 13).. if (floor <= 13).. if (floor == 13).. Page 12 Page 13 Operator Precedence Relational Operators The comparison operators have lower precedence than arithmetic operators Arithmetic operations are done before the comparison Calculations if (floor > height + 1) Page 15 Page 16 3

Relational Operators-Continue Common Error 3.2 Comparison of Floating-Point Numbers Floating-point numbers have limited precision Round-off errors can lead to unexpected results double r = Math.sqrt(2.0); if (r * r == 2.0) System.out.println("Math.sqrt(2.0) squared is 2.0"); else System.out.println("Math.sqrt(2.0) squared is not 2.0 but " + r * r); Output: Math.sqrt(2.0) squared is not 2.0 but 2.00000000000000044 Page 17 Page 18 Compare floating point numbers Use a very small value to compare the difference if floating-point values are close enough The magnitude of their difference should be less than some threshold Mathematically, we would write that x and y are close enough if: final double EPSILON = 1E-14; double r = Math.sqrt(2.0); if (Math.abs(r * r - 2.0) < EPSILON) System.out.println("Math.sqrt(2.0) squared is approx. 2.0"); Comparing Strings Do not use the == to compare Strings == compares the locations of two strings, and not their contents if ( Harry == Harry ) //true String name1= Harry ; String name2= Harry ; if(name1==name2) // false, because name1 and name2 are two different String objects, even they contain the same value Harry Page 19 Page 21 4

Comparing Strings using equals equals tests equal contents String name1= Harry ; String name2= Harry ; if(name1.equals(name2)) //true For case insensitive test ("Y" or "y ), use equalsignorecase if (input.equalsignorecase("y")) compareto Don t use >, <, <=, >= to compare two strings. Use compareto to compares String based on dictionary order. string1.compareto(string2) < 0 means: string1 comes before string2 in the dictionary string1.compareto(string2) > 0 means: string1 comes after string2 string1.compareto(string2) == 0 means: string1 equals string2 Harry.compareTo( Harry )? Sam.compareTo( Tom )? Copyright 2011 by John Wiley & Sons. All rights reserved. Page 22 Copyright 2011 by John Wiley & Sons. All rights reserved. Page 23 Lexicographical Order Space comes before numbers: 45" comes before 1" 45.compareTo( 1 )? Numbers come before upper case letters: 1" comes before Hello 1.compareTo( Hello )? Upper case letters come before lower case letters: Hello" comes before car Hello.compareTo( car )? Comparison Summary Integer types String types floating-point types Page 24 Copyright 2011 by John Wiley & Sons. All rights reserved. Page 25 5

Implementing if-else The university bookstore has a Kilobyte Day sale every October 24, giving an 8 percent discount on all computer accessory purchases if the price is less than $128, and a 16 percent discount if the price is at least $128. if (originalprice < 128) discountrate = 0.92; else discountrate = 0.84; discountedprice = discountrate * originalprice; 3.3 Multiple Alternatives What if you have more than two possibilities? The earthquake effect example: scale >= 8.0 7.0 <= scale < 8.0 6.0 <= scale < 7.0 4.5 <= scale < 6.0 scale < 4.5 < < < < 4.5 6.0 7.0 8.0 Page 28 Page 29 Flowchart of Multiway branching if, else if multiway branching False False False False True >= 8.0? Most Structures Fall True >= 7.0? Many Buildings Destroyed >= 6.0? >= 4.5? True True No destruction of buildings Many buildings considerably damaged, some collapse Damage to poorly constructed buildings if (richter >= 8.0) // Handle the special case first System.out.println("Most structures fall"); else if (richter >= 7.0) System.out.println("Many buildings destroyed"); else if (richter >= 6.0) System.out.println("Many buildings damaged, some collapse"); else if (richter >= 4.5) System.out.println("Damage to poorly constructed buildings"); else // so that the general case can be handled last System.out.println("No destruction of buildings"); Page 30 Page 31 6

What is wrong with this code? Alternative Implementation if (richter >= 8.0) System.out.println("Most structures fall"); if (richter >= 7.0) System.out.println("Many buildings destroyed"); if (richter >= 6.0) System.out.println("Many buildings damaged, some collapse"); if (richter >= 4.5) System.out.println("Damage to poorly constructed buildings"); Page 32 if (richter < 4.5) // Handle the special case first System.out.println("No destruction of buildings"); else if (richter < 6.0) System.out.println("Damage to poorly constructed buildings"); else if (richter < 7.0) System.out.println("Many buildings damaged, some collapse"); else if (richter < 8.5) System.out.println("Many buildings destroyed"); else // so that the general case can be handled last System.out.println("Most structures fall"); Copyright 2011 by John Wiley & Sons. All rights reserved. Page 33 Another way to multiway branch The switch statement chooses a case based on an primitive type value (In Java 7, String value also works) Primitive types: int, char, short, byte. break ends each case default catches all other values int digit =...; switch (digit) case 1: digitname = "one"; break; case 2: digitname = "two"; break; case 3: digitname = "three"; break; case 4: digitname = "four"; break; case 5: digitname = "five"; break; case 6: digitname = "six"; break; case 7: digitname = "seven"; break; case 8: digitname = "eight"; break; case 9: digitname = "nine"; break; default: digitname = ""; break; Page 34 Switch without break If the break is missing, the case falls through to the next case s statements. digit = 1, digitname? digit = 6, digitname? digit=-111, digitname? int digit =...; switch (digit) case 1: digitname = "one"; case 2: digitname = "two"; case 3: digitname = "three"; case 4: digitname = "four"; case 5: digitname = "five"; case 6: digitname = "six"; case 7: digitname = "seven"; case 8: digitname = "eight"; case 9: digitname = "nine"; default: digitname = ""; Copyright 2011 by John Wiley & Sons. All rights reserved. Page 35 7

The Switch Statement The type of the Expression in the Switch statement can be: char byte short int enum (later) char digit =...; switch (digit) case 1 : digitname = "one"; break; case 2 : digitname = "two"; break; case 3 : digitname = "three"; break; case 4 : digitname = "four"; break; case 5 : digitname = "five"; break; case 6 : digitname = "six"; break; case 7 : digitname = "seven"; break; case 8 : digitname = "eight"; break; case 9 : digitname = "nine"; break; default: digitname = ""; break; Copyright 2011 by John Wiley & Sons. All rights reserved. Page 36 char c=..; More on switch switch (c) case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': System.out.println("c is digit"); break; case ' ': case '\n': case '\t': System.out.println("c is space"); break; default: System.out.println("c is other"); break; c is 4? c is a? c is 9? Copyright 2011 by John Wiley & Sons. All rights reserved. Page 37 3.4 Nested if-else statement You can nest an if inside either branch of an if statement. Example: Ordering drinks Ask the customer for their drink order if customer orders alcoholic drink Ask customer for ID if customer s age is 21 or over Serve alcoholic drink else Politely explain the law to the customer else Serve customers a non-alcoholic drink Page 38 Flowchart of a Nested if Ask for order alcoholic drink? False Serve nonalcoholic drink Done True Check ID >= 21? Read law Nested if-else inside true branch of an if statement. Three paths False True Serve drink Page 39 8

Calculate Income Tax Return Nested Branches Compute taxes due, given filing status and income figure: If your filing status is Single If your filing status is Married Tax Bracket Percentage Tax Bracket Percentage $0... $32,000 10% 0... $64,000 10% Amount over $32,000 25% Amount over $64,000 25% Testing multiple variables filing status: single or married Income: 1. branch on the filing status 2. for each filing status, branch on income level The two-level decision process is reflected in two levels of if statements We say that the income test is nested inside the test for filing status Page 40 Copyright 2011 by John Wiley & Sons. All rights reserved. Page 41 Flowchart for Tax Example testing filing status Income portion below 32,000 is taxed by 10% Income portion above 32,000 is taxed by 25% testing income TaxCalculator.java Income portion below 64,000 is taxed by 10% Income portion above 64,000 is taxed by 25% Four branches testing income Page 42 Page 43 9

TaxCalculator.java TaxCalculator.java (3) The True branch (Single) Two branches within this branch The False branch (Married) Page 44 Page 45 Common Error 3.4 3.6 Test Cases for if-else The Dangling else Problem When an if statement is nested inside another if statement, the else clause is always associated with the closest if int a = ; int b = ; if (a > 5) if (b > 5 ) System.out.println( a and b are > 5); else System.out.println( a is > 5 ); To avoid confusion, use bracket for blocked if statements Aim to complete coverage of all branches: There are two possibilities for the marital status and two tax brackets for each status, yielding four test cases Each branch of your code should be covered with a test case Page 51 Page 58 10

Choosing Test Cases Choose input values in the condition statement: For each branch, test boundary conditions, such as an income that is at the boundary between two tax brackets, and a zero income If you are responsible for error checking (which is discussed in Section 3.8), also test an invalid input, such as a negative income Test Case status income 1 single 32,000 2 single 33,000 3 married 64,000 4 married 65,000 3.7 The Boolean Type Boolean Values true or false Boolean Variables boolean is a Java data type boolean found; Boolean Operators: && and and! && is the and operator is the or operator! Is the not operator Page 59 Page 60 and operator: && Both sides of the && must be true for the result to be true: A B A && B true true true true false false false Any false if( (interest=amount*rate) > 100 & (payment=amount/12) > 200).. // use interest and payment to // compute something Lazy evaluation: if A is false, return false without evaluating B When there is need to evaluate both A and B, use & instead of && or operator: Only one of the two conditions has to be true for the statement to be true A B A B true Any true false true true false false false if( (interest=amount*rate) > 100 (payment=amount/12) > 200).. // use interest and payment to // compute something Lazy evaluation: if A is true, return true without evaluating B When there is need to evaluate both A and B, use instead of Page 61 Page 62 11

Convert between switch & if if (digit == 1 ) digitname = "one"; else if (digit == 2) digitname = "two"; else if (digit == 3) digitname = "three"; else if (digit == 4) digitname = "four"; else if (digit == 5) digitname = "five"; else if (digit == 6) digitname = "six"; else if (digit == 7) digitname = "seven"; else if (digit == 8) digitname = "eight"; else if (digit == 9) digitname = "nine"; else digitname = " ; int digit =...; switch (digit) case 1: digitname = "one"; break; case 2: digitname = "two"; break; case 3: digitname = "three"; break; case 4: digitname = "four"; break; case 5: digitname = "five"; break; case 6: digitname = "six"; break; case 7: digitname = "seven"; break; case 8: digitname = "eight"; break; case 9: digitname = "nine"; break; default: digitname = ""; break; Page 63 Convert between if & switch int a =...; int a=..; switch (a) if (a > 0 && a <= 3) System.out.println( small ); case 1: case 2: case 3: else if (a > 3 && a <=6) System.out.println( small ); System.out.println( medium ); break; case 4: case 5: case 6: else if (a > 6 && a < 10) System.out.println( medium ); System.out.println( large ); break; else case 7: case 8: case 9: System.out.println( wrong System.out.println( large ); size ); break; default: System.out.println( wrong size ); break; Copyright 2011 by John Wiley & Sons. All rights reserved. Page 64 The not Operator:! The NOT operator inverts the value of a boolean variable: if (!attending grade < 60) System.out.println( Drop?"); It is considered gauche to write a test such as : if (attending == false (grade < 60) == true) Predicate Methods A method that returns a boolean value is called a predicate method. The Character class has a number of predicate methods: char char= ; if (Character.isDigit(ch))... Page 65 Page 66 12

Boolean Operator Examples Boolean Operator Examples Associate left-to-right Page 69 Page 70 Common Error 3.6 Confusing && and Conditions A value x lies between a and b if it is at least a and at most b. A value y lies outside that range if it is less than a or greater than b. a y < a y > b b x >= a && x <= b Lazy Evaluation: && Combined conditions are evaluated from left to right If the left half of an and condition is false, why look further? if (temp > 0 && temp < 100) System.out.println("Liquid"); A useful example: Done! if (quantity > 0 && price / quantity < 10) Page 72 Page 73 13

Lazy Evaluation: If the left half of the or is true, why look further? if (temp <= 0 temp >= 100) System.out.println( Not Liquid"); Java doesn t! Don t do these second: Assignment Output Done! 3.8 Input Validation Input Validation: A user input may have an invalid character or value (wrong type). Use Scanner methods to validate user inputs. hasnextint True if integer False if not if (in.hasnextint()) int floor = in.nextint(); // Process the input value else System.out.println("Not integer."); Then range check value We expect a floor number to be between 1 and 20 NOT 0, 13 or > 20 Page 74 Page 76 ElevatorSimulation2.java ElevatorSimulation2.java Input value validity checking Input value range checking Page 77 Page 78 14

Summary: if Statement The if statement allows a program to carry out different actions depending on the nature of the data to be processed. Relational operators ( < <= > >= ==!= ) are used to compare numbers and Strings. Do not use the == operator to compare Strings. Use the equals method instead. The compareto method compares Strings in lexicographic order. Multiple if statements can be combined to evaluate complex decisions. When using multiple if statements, test general conditions after more specific conditions. Page 79 Summary: Nested IF When a decision statement is contained inside the branch of another decision statement, the statements are nested. Nested decisions are required for problems that have two levels of decision making. Flow charts are made up of elements for tasks, input/ output, and decisions. Each branch of a decision can contain tasks and further decisions. Never point an arrow inside another branch. Each branch of your program should be covered by a test case. It is a good idea to design test cases before implementing a program. Page 80 Summary: Boolean The Boolean type boolean has two values, true and false. Java has two Boolean operators that combine conditions: && (and) and (or). To invert a condition, use the! (not) operator. The && and operators are computed lazily: As soon as the false (for &&) or truth (for ) value is determined, no further condition is evaluated. You can use Scanner hasnext methods to ensure that the data is what you expect. Copyright 2011 by John Wiley & Sons. All rights reserved. Page 81 15