Building Java Programs

Similar documents
Building Java Programs

Building Java Programs

AP Computer Science. if/else, return values. Copyright 2010 by Pearson Education

COSC 236 Section 101 Computer Science 1 -- Prof. Michael A. Soderstrand

Garfield AP CS. User Input, If/Else. Most slides from Building Java Programs. Thanks, Stuart Regesand Marty Stepp!

Returns & if/else. Parameters and Objects

Lecture 4: Conditionals

Building Java Programs

Building Java Programs Chapter 4

Topic 12 more if/else, cumulative algorithms, printf

Building Java Programs

CSS 161 Fundamentals of Compu3ng. Flow control (2) October 10, Instructor: Uma Murthy

Topic 11 Scanner object, conditional execution

Building Java Programs

Topic 11 Scanner object, conditional execution

Topic 12 more if/else, cumulative algorithms, printf

CS 112 Introduction to Programming

Flow of Control of Program Statements CS 112 Introduction to Programming. Basic if Conditional Statement Basic Test: Relational Operators

Advanced if/else & Cumulative Sum

CS 112 Introduction to Programming

CS 112 Introduction to Programming

Building Java Programs

CSc 110, Autumn Lecture 11: if / else. Adapted from slides by Marty Stepp and Stuart Reges

Building Java Programs

Building Java Programs

Topic 14 while loops and loop patterns

CSc 110, Spring Lecture 11: if / else. Adapted from slides by Marty Stepp and Stuart Reges

Chapter 4: Control Structures I

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

Control Structures in Java if-else and switch

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

Midterm Examination (MTA)

Assignment 2.4: Loops

Building Java Programs

CS 112 Introduction to Programming

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

SSEA Computer Science: Track A. Dr. Cynthia Lee Lecturer in Computer Science Stanford

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

Chapter 4: Conditionals and Recursion

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

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

! definite loop: A loop that executes a known number of times. " The for loops we have seen so far are definite loops. ! We often use language like

Building Java Programs

Tutorial # 4. Q1. Evaluate the logical (Boolean) expression in the following exercise

Control Flow Practice Problems Mr. Fahrenbacher AP Computer Science A

Building Java Programs

Arrays. Weather Problem Array Declaration Accessing Elements Arrays and for Loops Array length field Quick Array Initialization Array Traversals

CONDITIONAL EXECUTION

Selections. CSE 114, Computer Science 1 Stony Brook University

Building Java Programs

b. Suppose you enter input from the console, when you run the program. What is the output?

COMP-202: Foundations of Programming. Lecture 6: Conditionals Jackie Cheung, Winter 2016

Midterm Review Session

Sequence structure. The computer executes java statements one after the other in the order in which they are written. Total = total +grade;

Chapter 3. Selections

CS 112 Introduction to Programming

assertion: A statement that is either true or false.

Building Java Programs

COMP-202 Unit 4: Programming With Iterations. CONTENTS: The while and for statements

Control Structures in Java if-else and switch

Chapter 2: Basic Elements of Java

Type boolean. Building Java Programs. Recap: Type boolean. "Short-circuit" evaluation. De Morgan's Law. Boolean practice questions.

Building Java Programs Chapter 5

Building Java Programs

Building Java Programs

Repetition, Looping. While Loop

Example. Write a program which sums two random integers and lets the user repeatedly enter a new answer until it is correct.

2.2 - Making Decisions

Chapter 3 Selection Statements

Example: Monte Carlo Simulation 1

Date: Dr. Essam Halim

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

CS 231 Data Structures and Algorithms Fall Event Based Programming Lecture 06 - September 17, Prof. Zadia Codabux

Building Java Programs. Chapter 2: Primitive Data and Definite Loops

Loops. CSE 114, Computer Science 1 Stony Brook University

CSE 142, Autumn 2011 Midterm Exam: Friday, November 4, 2011

Java Programming: Guided Learning with Early Objects Chapter 5 Control Structures II: Repetition

SSEA Computer Science: Track A. Dr. Cynthia Lee Lecturer in Computer Science Stanford

CONTENTS: While loops Class (static) variables and constants Top Down Programming For loops Nested Loops

Decision Structures. Selection. Selection options (in Java) Plain if s (3 variations) Each action could be any of: if else (3 variations)

CSE 142, Autumn 2010 Midterm Exam, Friday, November 5, 2010

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

CSE 142, Summer 2013 Midterm Exam, Friday, July 26, 2013

Java Programming: Guided Learning with Early Objects Chapter 5 Control Structures II: Repetition

Question: Total Points: Score:

Building Java Programs Chapter 2. bug. Primitive Data and Definite Loops. Copyright (c) Pearson All rights reserved. Software Flaw.

Building Java Programs Chapter 2

Iteration statements - Loops

Building Java Programs Chapter 2

CCHAPTER SELECTION STATEMENTS HAPTER 3. Objectives

Some Sample AP Computer Science A Questions - Solutions

CSIS-120 Final Exam Fall 2015 Name:

King Saud University College of Computer and Information Sciences Computer Science Department

Conditional Execution

Control Structures. Lecture 4 COP 3014 Fall September 18, 2017

Building Java Programs

Building Java Programs

1. An operation in which an overall value is computed incrementally, often using a loop.

Full file at

CSC 1051 Villanova University. CSC 1051 Data Structures and Algorithms I. Course website:

Transcription:

Building Java Programs Chapter 4 Lecture 4-1: if and if/else Statements reading: 4.2 self-check: #4-5, 7, 10, 11 exercises: #7 videos: Ch. 4 #2-4

The if/else statement Executes one block if a test is true, another if false if (test) { else { Example: double gpa = console.nextdouble(); if (gpa >= 2.0) { System.out.println("Welcome to Mars University!"); else { System.out.println("Sorry..."); 2

The if statement Executes a block of statements only if a test is true if (test) { statement;... statement; Example: double gpa = console.nextdouble(); if (gpa >= 2.0) { System.out.println("Application accepted."); 3

What do we need? The if/else statement is a really key programming tool Every programming language has it; we use it everywhere What a program does depends on the data Variations are a matter of style Good style lets other programmers quickly see what you mean We could make do with just if/else Example (more in a minute): Good style Bad style but it works if(test) { if(test) { else { // nothing 4

Relational expressions A test in an if is the same as in a for loop. for (int i = 1; i <= 10; i++) {... if (i <= 10) {... These are boolean expressions, seen in Ch. 5. Tests use relational operators: Operator Meaning Example Value == equals 1 + 1 == 2 true!= does not equal 3.2!= 2.5 true < less than 10 < 5 false > greater than 10 > 5 true <= less than or equal to 126 <= 100 false >= greater than or equal to 5.0 >= 5.0 true 5

Multiple part tests Something else that works but is bad style if(x > -10) { if(x < 10) { System.out.println("x is 1 digit long"); We can combine tests with && if(x > -10 && x < 10) { System.out.println("x is 1 digit long"); Aside: could also just test x % 10 == x 6

Logical operators: &&,,! Conditions can be combined using logical operators: Operator Description Example Result && and (2 == 3) && (-1 < 5) false or (2 == 3) (-1 < 5) true! not!(2 == 3) true Truth tables for each, used with logical values p and q: p q p && q p q true true true true true false false true false true false true false false false false p!p true false false true 7

Evaluating logic expressions Relational operators have lower precedence than math. 5 * 7 >= 3 + 5 * (7-1) 5 * 7 >= 3 + 5 * 6 35 >= 3 + 30 35 >= 33 true Relational operators cannot be "chained" as in algebra. -10 <= x <= 10 (assume x is 15) true <= 10 error! Instead, combine multiple tests with && or -10 <= x && x <= 10 (assume x is 15) true && false false 8

Logical mini-exercises What is the result of each of the following expressions? int x = 10; int y = 5; int z = 12; x <= y Answer: false y < x && y <= z Answer: true x/y+x == z && z > 20 Answer: false x <= 2*y && x >= 2*y && z > 4 Answer: true!(x < y && x < z) Answer: true 9

Loops with if/else if/else statements can be used with loops or methods: int evensum = 0; int oddsum = 0; for (int i = 1; i <= 5; i++) { if (i % 2 == 0) { evensum = evensum + i; else { oddsum = oddsum + i; System.out.println("Even sum: " + evensum); System.out.println("Odd sum: " + oddsum); 10

Another Example // compute how many feet taller first thing is // Note: assumes first thing *is* taller int feettaller(int feet1, int inches1, int feet2, int inches2) { int answer = feet1 feet2; if(inches1 < inches2) { --answer; return answer; Note: Many other ways to write this function 11

Nested if/else reading: 4.2, 4.5 self-check: #6, 8, 9, 24-27 exercises: #10-14 videos: Ch. 4 #4

Sequential if bug What's wrong with the following code? Scanner console = new Scanner(System.in); System.out.print("What percentage did you earn? "); int percent = console.nextint(); if (percent >= 90) { System.out.println("You got an A!"); if (percent >= 80) { System.out.println("You got a B!"); if (percent >= 70) { System.out.println("You got a C!"); if (percent >= 60) { System.out.println("You got a D!"); else { System.out.println("You got an F!");... 13

Fixed but bad style With what we know so far, we would write this: if (percent >= 90) { System.out.println("You got an A!"); else { if (percent >= 80) { System.out.println("You got a B!"); else { if (percent >= 70) { System.out.println("You got a C!"); else { if (percent >= 60) { System.out.println("You got a D!"); else { System.out.println("You got an F!"); We want this meaning, but nicer looking 14

Nested if/else Chooses between outcomes using many tests if (test) { else if (test) { else { Example: if (number > 0) { System.out.println("Positive"); else if (number < 0) { System.out.println("Negative"); else { System.out.println("Zero"); 15

Nested if/else/if If it ends with else, one code path must be taken. If it ends with if, the program might not execute any path. if (test) { else if (test) { else if (test) { Example: if (place == 1) { System.out.println("You win the gold medal!"); else if (place == 2) { System.out.println("You win a silver medal!"); else if (place == 3) { System.out.println("You earned a bronze medal."); 16

Structures Exactly 1 path: (mutually exclusive) if (test) { else if (test) { else { 0 or 1 path: if (test) { else if (test) { else if (test) { 0, 1, or many paths: (independent tests, not exclusive) if (test) { if (test) { if (test) { 17

Which nested if/else? (1) if/if/if (2) nested if/else (3) nested if/else/if Reading the user's GPA and printing whether the student is on the dean's list (3.8 to 4.0) or honor roll (3.5 to 3.8). (3) nested if / else if Printing whether a number is even or odd. (N/A) simple if / else Printing whether a user is lower-class, middle-class, or upperclass based on their income. (2) nested if / else if / else Reading a number from the user and printing whether it is divisible by 2, 3, and/or 5. (1) sequential if / if / if Printing a grade of A, B, C, D, or F based on a percentage. (2) nested if / else if / else if / else if / else 18

Factoring if/else code factoring: extracting common/redundant code Factoring if/else code can reduce the size of if/else statements or eliminate the need for if/else altogether. Example: if (a == 1) { x = 3; else if (a == 2) { x = 6; y++; else { // a == 3 x = 9; x = 3 * a; if (a == 2) { y++; 19

Code in need of factoring if (money < 500) { System.out.println("You have, $" + money + " left."); System.out.print("Caution! Bet carefully."); System.out.print("How much do you want to bet? "); bet = console.nextint(); else if (money < 1000) { System.out.println("You have, $" + money + " left."); System.out.print("Consider betting moderately."); System.out.print("How much do you want to bet? "); bet = console.nextint(); else { System.out.println("You have, $" + money + " left."); System.out.print("You may bet liberally."); System.out.print("How much do you want to bet? "); bet = console.nextint(); 20

Code after factoring System.out.println("You have, $" + money + " left."); if (money < 500) { System.out.print("Caution! Bet carefully."); else if (money < 1000) { System.out.print("Consider betting moderately."); else { System.out.print("You may bet liberally."); System.out.print("How much do you want to bet? "); bet = console.nextint(); If the start of each branch is the same, move it before the if/else. If the end of each branch is the same, move it after the if/else. If similar but code exists in each branch, look for patterns. 21

Factoring mini-exercise Improve the following code: if (x < 10) { System.out.println("x = " + x); y = x+20; System.out.println("y = " + y); else { System.out.println("x = " + x); y = x+5; System.out.println("y = " + y); 22

Factoring mini-exercise - solution if (x < 10) { y = x+20; else { y = x+5; System.out.println("x = " + x); System.out.println("y = " + y); (or the first println could be before the if ) 23

The "dangling if" problem What can be improved about the following code? if (x < 0) { System.out.println("x is negative"); else if (x >= 0) { System.out.println("x is non-negative"); The second if test is unnecessary and can be removed: if (x < 0) { System.out.println("x is negative"); else { System.out.println("x is non-negative"); This is also relevant in methods that use if with return... 24

if/else with return Methods can return different values using if/else: // Returns the phone-row of an int (assumed to be 0-9) public static String phonerow(int x) { if (x % 3 == 1) { return left ; else if (x % 3 == 2 x == 0) { return middle ; else { return right ; Whichever path the code enters, it will return the appropriate value. Returning a value causes a method to immediately exit. All code paths must reach a return statement. All paths must also return a value of the same type. 25

All paths must return public static String phonerow(int x) { if (x % 3 == 1) { return left ; else if (x % 3 == 2 x == 0) { return middle ; // Error: not all paths return a value The following also does not compile: public static String phonerow(int x) { if (x % 3 == 1) { return left ; else if (x % 3 == 2 x == 0) { return middle ; else if (x % 3 == 0) { return right ; The compiler thinks if/else/if code might skip all paths. 26

if/else, return question Write a method countfactors that returns the number of factors of an integer. countfactors(24) returns 8 because 1, 2, 3, 4, 6, 8, 12, and 24 are factors of 24. Write a program that prompts the user for a maximum integer and prints all prime numbers up to that max. Maximum number? 52 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 15 primes (28.84%) 27

if/else, return answer 1 // Prompts for a maximum number and prints each prime up to that maximum. import java.util.*; public class Primes { public static void main(string[] args) { // read max from user Scanner console = new Scanner(System.in); System.out.print("Maximum number? "); int max = console.nextint(); printprimes(max); // Prints all prime numbers up to the given maximum. public static void printprimes(int max) { int primes = 0; for (int i = 2; i <= max; i++) { if (countfactors(i) == 2) { // i is prime System.out.print(i + " "); primes++; System.out.println(); double percent = 100.0 * primes / max; System.out.printf("%d primes (%.2f%%)\n", primes, percent); 28

if/else, return answer 2... // Returns how many factors the given number has. public static int countfactors(int number) { int count = 0; for (int i = 1; i <= number; i++) { if (number % i == 0) { count++; // i is a factor of number return count; 29