Arithmetic Compound Assignment Operators

Similar documents
Arithmetic Compound Assignment Operators

Scanner Objects. Zheng-Liang Lu Java Programming 82 / 133

Logic is the anatomy of thought. John Locke ( ) This sentence is false.

Common Errors double area; 3 if (r > 0); 4 area = r r 3.14; 5 System.out.println(area); 6... Zheng-Liang Lu Java Programming 101 / 141

1 class Lecture3 { 2 3 "Selections" // Keywords 8 if, else, else if, switch, case, default. Zheng-Liang Lu Java Programming 89 / 137

++x vs. x++ We will use these notations very often.

1 class Lecture3 { 2 3 "Selections" // Keywords 8 if, else, else if, switch, case, default. Zheng-Liang Lu Java Programming 88 / 133

Jump Statements. The keyword break and continue are often used in repetition structures to provide additional controls.

Example. Write a program which generates 2 random integers and asks the user to answer the math expression.

switch-case Statements

Jump Statements. The keyword break and continue are often used in repetition structures to provide additional controls.

Example. Generating random numbers. Write a program which generates 2 random integers and asks the user to answer the math expression.

Example: Monte Carlo Simulation 1

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

IEEE Floating-Point Representation 1

Exercise (Revisited)

Nested Loops. A loop can be nested inside another loop.

false, import, new 1 class Lecture2 { 2 3 "Data types, Variables, and Operators" 4

Data Types. 1 You cannot change the type of the variable after declaration. Zheng-Liang Lu Java Programming 52 / 87

Values in 2 s Complement

1 class Lecture5 { 2 3 "Arrays" 4. Zheng-Liang Lu Java Programming 136 / 174

1 class Lecture4 { 2 3 "Loops" / References 8 [1] Ch. 5 in YDL 9 / Zheng-Liang Lu Java Programming 125 / 207

false, import, new 1 class Lecture2 { 2 3 "Data types, Variables, and Operators" 4

Variable Scope. The variable scope is the range of the program where the variable can be referenced.

How to swap values of two variables without tmp? However, this naive algorithm is biased. 1

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

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

false, import, new 1 class Lecture2 { 2 3 "Data types, Variables, and Operators" 4

1 class Lecture5 { 2 3 "Methods" / References 8 [1] Ch. 5 in YDL 9 [1] Ch. 20 in YDL 0 / Zheng-Liang Lu Java Programming 176 / 199

Loops. EECS1022: Programming for Mobile Computing Winter 2018 CHEN-WEI WANG

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

Example. Password generator

Motivation of Loops. Loops. The for Loop (1) Learning Outcomes

1 class Lecture2 { 2 3 "Elementray Programming" / References 8 [1] Ch. 2 in YDL 9 [2] Ch. 2 and 3 in Sharan 10 [3] Ch.

JAVA PROGRAMMING LAB. ABSTRACT In this Lab you will learn to define and invoke void and return java methods

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

Elementary Programming

Introduction to Java & Fundamental Data Types

Zheng-Liang Lu Java Programming 45 / 79

Chapter 3. Selections

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

Tester vs. Controller. Elementary Programming. Learning Outcomes. Compile Time vs. Run Time

Eng. Mohammed S. Abdualal

false, import, new 1 class Lecture2 { 2 3 "Data types, Variables, and Operators" 4

Computer Programming, I. Laboratory Manual. Experiment #2. Elementary Programming

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

Cloning Arrays. In practice, one might duplicate an array for some reason. One could attempt to use the assignment statement (=), for example,

Motivation of Loops. Loops. The for Loop (1) Learning Outcomes

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

Selections. Zheng-Liang Lu 91 / 120

Program Control Flow

Program Control Flow

Chapter 5 Control Statements: Part 2 Section 5.2 Essentials of Counter-Controlled Repetition

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

Entry Point of Execution: the main Method. Elementary Programming. Learning Outcomes. Development Process

CIS 1068 Program Design and Abstraction Spring2016 Midterm Exam 1. Name SOLUTION

Chapter 3: Operators, Expressions and Type Conversion

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

Assoc. Prof. Dr. Marenglen Biba. (C) 2010 Pearson Education, Inc. All rights reserved.

CS5000: Foundations of Programming. Mingon Kang, PhD Computer Science, Kennesaw State University

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

Please answer the following questions. Do not re-code the enclosed codes if you have already completed them.

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

Pace University. Fundamental Concepts of CS121 1

3 The L oop Control Structure

Repetition, Looping. While Loop

COMP-202: Foundations of Programming. Lecture 4: Flow Control Loops Sandeep Manjanna, Summer 2015

CCHAPTER SELECTION STATEMENTS HAPTER 3. Objectives

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

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

Programming with Java

Introduction to Java Applications

CompSci 125 Lecture 11

Chapter 3 Selection Statements

Date: Dr. Essam Halim

Entry Point of Execution: the main Method. Elementary Programming. Compile Time vs. Run Time. Learning Outcomes

Exercise: Sorting 1. ˆ Let A be any array. ˆ Write a program which outputs the sorted array of A (in ascending order).

Computer Programming I - Unit 5 Lecture page 1 of 14

Java Review. Java Program Structure // comments about the class public class MyProgram { Variables

More on control structures

Exercise. Write a program which allows the user to enter the math grades one by one (-1 to exit), and outputs a histogram.

Basic computer skills such as using Windows, Internet Explorer, and Microsoft Word. Chapter 1 Introduction to Computers, Programs, and Java

Wentworth Institute of Technology. Engineering & Technology WIT COMP1000. Simple Control Flow: if-else statements

L o o p s. for(initializing expression; control expression; step expression) { one or more statements }

DM503 Programming B. Peter Schneider-Kamp.

Iteration: Intro. Two types of loops: 1. Pretest Condition precedes body Iterates 0+ times. 2. Posttest Condition follows body Iterates 1+ times

Chapter 6. Repetition Statements. Animated Version The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

Chapter 4 Introduction to Control Statements

STUDENT LESSON A12 Iterations

REPETITION CONTROL STRUCTURE LOGO

Expression statements are formed by adding a semicolon to the end of certain types of expressions.

Object-Oriented Programming

3chapter C ONTROL S TATEMENTS. Objectives

Chapter 5 Loops Liang, Introduction to Java Programming, Tenth Edition, Global Edition. Pearson Education Limited

CS111: PROGRAMMING LANGUAGE II

Module 7: Arrays (Single Dimensional)

CS11 Java. Fall Lecture 1

SOFTWARE DEVELOPMENT 1. Control Structures 2018W A. Ferscha (Institute of Pervasive Computing, JKU Linz)

Programming Basics. Digital Urban Visualization. People as Flows. ia

In this chapter, you will:

Transcription:

Arithmetic Compound Assignment Operators Note that these shorthand operators are not available in languages such as Matlab and R. Zheng-Liang Lu Java Programming 76 / 172

Example 1... 2 int x = 1; 3 System.out.println(x); // output 1 4 x = x + 1; 5 System.out.println(x); // output 2 6 x += 2; 7 System.out.println(x); // output 4 8 x++; // equivalent to x += 1 and x = x + 1 9 System.out.println(x); // output 5 10... Zheng-Liang Lu Java Programming 77 / 172

The compound assignment operators are also useful for char values. 1 For example, 1... 2 char s = a ; 3 System.out.println(s); // output a 4 s += 1; 5 System.out.println(s); // output b 6 s++; 7 System.out.println(s); // output c 8... 1 Contribution by Mr. Edward Wang (Java265) on May 1, 2016. Zheng-Liang Lu Java Programming 78 / 172

++x vs. x++ The expression ++x first increments the value of x and then returns x. Instead, the expression x++ first returns the value of x and then increments itself. For example, 1... 2 int x = 1; 3 int y = ++x; 4 System.out.println(y); // output 2; aka preincrement 5 System.out.println(x); // output 2 6 7 int w = 1; 8 int z = w++; 9 System.out.println(z); // output 1; aka postincrement 10 System.out.println(w); // output 2 11... We will use these notations very often. Zheng-Liang Lu Java Programming 79 / 172

Operator Precedence 2 2 See Table3-10 in YDL, p. 116. Zheng-Liang Lu Java Programming 80 / 172

Using Parentheses Parentheses are used in expressions to change the natural order of precedence among the operators. One always evaluates the expression inside of parentheses first. Zheng-Liang Lu Java Programming 81 / 172

Scanner Objects It is not convenient to modify the source code and recompile it for a different radius. Reading from the console enables the program to receive an input from the user. A Scanner object provides some input methods, say the input received from the keyboard or the files. Java uses System.in to refer to the standard input device, by default, the keyboard. Zheng-Liang Lu Java Programming 82 / 172

Example: Reading Input From The Console Write a program which receives a number as input, and outputs the area of the circle. 1 import java.util.scanner; 2... 3 Scanner input = new Scanner(System.in); 4 System.out.println("Enter r?"); 5 // input 6 int r = input.nextint(); 7 // algorithm 8 double area = r r 3.14; 9 // output 10 System.out.println(area); 11 input.close(); 12... Zheng-Liang Lu Java Programming 83 / 172

In the listing, Line 3 is to create a Scanner object by the new operator, as an agent between the keyboard and your program. Note that all objects are resided in the heap of the memory. To control this object, its memory address is then assigned to the variable input which is a variable in the stack of memory. So the variable input is a reference. We will discuss the objects and reference variables later. Zheng-Liang Lu Java Programming 84 / 172

Methods Provided by Scanner Objects 3 3 See Table 2-1 in YDL, p. 38. Zheng-Liang Lu Java Programming 85 / 172

Example: Mean and Standard Deviation Write a program which calculates the mean and the standard deviation of 3 numbers. The mean of 3 numbers is given by x = ( 3 i=1 x i Also, the resulting standard deviation is given by S = 3 i=1 (x i x) 2. 3 You may use these two methods: Math.pow(double x, double y) for x y Math.sqrt(double x) for x See more methods within Math class. ) /3. Zheng-Liang Lu Java Programming 86 / 172

1... 2 Scanner input = new Scanner(System.in); 3 System.out.println("a =?"); 4 double a = input.nextdouble(); 5 System.out.println("b =?"); 6 double b = input.nextdouble(); 7 System.out.println("c =?"); 8 double c = input.nextdouble(); 9 10 double mean = (a + b + c) / 3; 11 double std = Math.sqrt((Math.pow(a mean, 2) + 12 Math.pow(b mean, 2) + 13 Math.pow(c mean, 2)) / 3); 14 15 System.out.println("mean = " + mean); 16 System.out.println("std = " + std); 17... Zheng-Liang Lu Java Programming 87 / 172

1 class Lecture3 { 2 3 "Selections" 4 5 } 6 7 // Keywords 8 if, else, else if, switch, case, default Zheng-Liang Lu Java Programming 88 / 172

Flow Controls The basic algorithm (and program) is constituted by the following operations: Sequential statements: execute instructions in order. Selection: first check if the predetermined condition is satisfied, then execute the corresponding instruction. Repetition: repeat the execution of some instructions until the criterion fails. Zheng-Liang Lu Java Programming 89 / 172

Note that they are involved with each other generally. For example, recall how to find the maximum in the input list? Zheng-Liang Lu Java Programming 90 / 172

Selections One-way if statements Two-way if-else statements Nested if statements Multiway if-else if-else statements switch-case statements Conditional operators Zheng-Liang Lu Java Programming 91 / 172

One-Way if Statements A one-way if statement executes an action if and only if the condition is true. Zheng-Liang Lu Java Programming 92 / 172

1... 2 if (condition) { 3 // selection body 4 } 5... The keyword if is followed by the parenthesized condition. The condition should be a boolean expression or a boolean value. It the condition is true, then the statements in the selection body will be executed once. If not, then the program won t enter the selection body and skip the whole selection body. Note that the braces can be omitted if the block contains only single statement. Zheng-Liang Lu Java Programming 93 / 172

Example Write a program which receives a nonnegative number as input for the radius of a circle, and determines the area of the circle. 1... 2 double area; 3 if (r > 0) { 4 area = r r 3.14; 5 System.out.println(area); 6 } 7... However, the world is not well-defined. Zheng-Liang Lu Java Programming 94 / 172

Two-Way if-else Statements A two-way if-else statement decides which statements to execute based on whether the condition is true or false. 1... 2 if (condition) { 3 // body for the true case 4 } else { 5 // body for the false case 6 } 7... Zheng-Liang Lu Java Programming 95 / 172

Zheng-Liang Lu Java Programming 96 / 172

Example Write a program which receives a number as input for the radius of a circle. If the number is nonnegative, then determine the area of the circle; otherwise, output Not a circle. 1... 2 double area; 3 if (r > 0) { 4 area = r r 3.14; 5 System.out.println(area); 6 } else { 7 System.out.println("Not a circle."); 8 } 9 input.close(); 10 } 11... Zheng-Liang Lu Java Programming 97 / 172

Nested if Statements For example, 1... 2 if (score >= 90) 3 System.out.println("A"); 4 else { 5 if (score >= 80) 6 System.out.println("B"); 7 else { 8 if (score >= 70) 9 System.out.println("C"); 10 else { 11 if (score >= 60) 12 System.out.println("D"); 13 else 14 System.out.println("F"); 15 } 16 } 17 } 18... Zheng-Liang Lu Java Programming 98 / 172

Multi-Way if-else Let s redo the previous problem. 1... 2 if (score >= 90) 3 System.out.println("A"); 4 else if (score >= 80) 5 System.out.println("B"); 6 else if (score >= 70) 7 System.out.println("C"); 8 else if (score >= 60) 9 System.out.println("D"); 10 else 11 System.out.println("F"); 12... An if-elseif-else statement is a preferred format for multiple alternatives, in order to avoid deep indentation and make the program easy to read. Zheng-Liang Lu Java Programming 99 / 172

The order of conditions may be relevant. (Why?) 1... 2 if (score >= 90 && score <= 100) 3 else if (score >= 80 && score < 90) 4... 5 else 6... The performance may degrade due to the order of conditions. (Why?) Zheng-Liang Lu Java Programming 100 / 172

Common Errors 1... 2 double area; 3 if (r > 0); 4 area = r r 3.14; 5 System.out.println(area); 6... Zheng-Liang Lu Java Programming 101 / 172

Generating random numbers Example Write a program which generates 2 random integers and asks the user to answer the math expression. For example, the program shows 2 + 5 =? If the user answers 7, then the program reports Correct. and terminates. Otherwise, the program reports Wrong answer. The correct answer is 7. for this case. You may use Math.random() for a random value between 0.0 and 1.0, excluding themselves. 4 4 You may see PRNG in https://en.wikipedia.org/wiki/pseudorandom_number_generator. Zheng-Liang Lu Java Programming 102 / 172

1... 2 int x = (int) (Math.random() 10); // integers 0 9 3 int y = (int) (Math.random() 10); 4 int answer = x + y; 5 6 System.out.println(x + " + " + y + " =?"); 7 8 Scanner input = new Scanner(System.in); 9 int z = input.nextint(); 10 11 if (z == answer) 12 System.out.println("Correct."); 13 else 14 System.out.println("Wrong. Answer: " + answer); 15 input.close(); 16... Can you extend this program for all arithmetic expressions (i.e., + )? Zheng-Liang Lu Java Programming 103 / 172

Exploring the unknown requires tolerating uncertainty. Brian Greene I can live with doubt, and uncertainty, and not knowing. I think it is much more interesting to live not knowing than have answers which might be wrong. Richard Feynman Zheng-Liang Lu Java Programming 104 / 172

Exercise Find Max Write a program which determines the maximum value in 3 random integers whose range from 0 to 99. How many variables do we need? How to compare? How to keep the maximum value? Zheng-Liang Lu Java Programming 105 / 172

1... 2 int x = (int) (Math.random() 100); 3 int y = (int) (Math.random() 100); 4 int z = (int) (Math.random() 100); 5 6 int max = x; 7 if (y > max) max = y; 8 if (z > max) max = z; 9 System.out.println("max = " + max); 10... In this case, a scalar variable is not convenient. (Why?) So we need arrays and loops. Zheng-Liang Lu Java Programming 106 / 172

switch-case Statements A switch-case structure takes actions depending on the target variable. 1... 2 switch (target) { 3 case v1: 4 // statements 5 break; 6 case v2: 7. 8. 9 case vk: 10 // statements 11 break; 12 default: 13 // statements 14 } 15... Zheng-Liang Lu Java Programming 107 / 172

A switch-case statement is more convenient than an if statement for multiple discrete conditions. The variable target, always enclosed in parentheses, must yield a value of char, byte, short, int, or String type. The value v 1,..., and v k must have the same data type as the variable target. In each case, a break statement is a must. 5 break is used to break a construct! The default case, which is optional, can be used to perform actions when none of the specified cases matches target. Counterpart to else statements. 5 If not, there will be a fall-through behavior. Zheng-Liang Lu Java Programming 108 / 172

Example 1... 2 // RED: 0 3 // YELLOW: 1 4 // GREEN: 2 5 int trafficlight = (int) (Math.random() 3); 6 switch (trafficlight) { 7 case 0: 8 System.out.println("Stop!!!"); 9 break; 10 case 1: 11 System.out.println("Slow down!!"); 12 break; 13 case 2: 14 System.out.println("Go!"); 15 } 16... Zheng-Liang Lu Java Programming 109 / 172

Conditional Operators A conditional expression evaluates an expression based on the specified condition and returns a value accordingly. 1... 2 somevar = booleanexpr? expra : exprb; 3... This is the only ternary operator in Java. If the boolean expression is evaluated true, then return expr A; otherwise, expr B. Zheng-Liang Lu Java Programming 110 / 172

For example, 1... 2 if (num1 > num2) 3 max = num1; 4 else 5 max = num2; 6... Alternatively, one can use a conditional expression like this: 1... 2 max = (num1 > num2)? num1 : num2; 3... Zheng-Liang Lu Java Programming 111 / 172

1 class Lecture4 { 2 3 "Loops" 4 5 } 6 7 // keywords: 8 while, do, for, break, continue Zheng-Liang Lu Java Programming 112 / 172

Loops 6 A loop can be used to make a program execute statements repeatedly without having to code the same statements. For example, output Hello, Java. for 100 times. 1... 2 System.out.println("Hello, Java."); 3 System.out.println("Hello, Java."); 4. 5. // copy and paste for 100 times 6. 7 System.out.println("Hello, Java."); 8... 6 You may try https: //www.google.com/doodles/celebrating-50-years-of-kids-coding. Zheng-Liang Lu Java Programming 113 / 172

1... 2 int cnt = 0; 3 while (cnt < 100) { 4 System.out.println("Hello, Java."); 5 cnt++; 6 } 7... This is a toy example to show the power of loops. In practice, any routine which repeats couples of times 7 can be done by folding them into a loop. 7 I prefer to call these routines patterns. Zheng-Liang Lu Java Programming 114 / 172

成也迴圈, 敗也迴圈 Loops provide substantial computational power. Loops bring an efficient way of programming. Loops could consume a lot of time. 8 8 We will introduce the analysis of algorithms soon. Zheng-Liang Lu Java Programming 115 / 172

while Loops A while loop executes statements repeatedly while the condition is true. 1... 2 while (condition) { 3 // loop body 4 } 5... The condition should be a boolean expression which determines whether or not the execution of the body occurs. If true, the loop body is executed and check the condition again. Otherwise, the entire loop terminates. Zheng-Liang Lu Java Programming 116 / 172

Zheng-Liang Lu Java Programming 117 / 172

Example Write a program which sums up all integers from 1 to 100. In math, the question can be written as: sum = 1 + 2 + + 100. But this form is not doable in the machine. 9 9 We need to develop computational thinking. Read http://rsta.royalsocietypublishing.org/content/366/1881/3717.full or http://blog.orangeapple.tw/posts/what-is-computational-thinking/. Zheng-Liang Lu Java Programming 118 / 172

Normally, the machine executes the instructions sequentially. So one needs to decompose the math equation into several steps, like: 1... 2 int sum = 0; 3 sum = sum + 1; 4 sum = sum + 2; 5. 6. 7. 8 sum = sum + 100; 9... It is obvious that many similar statements can be found. Zheng-Liang Lu Java Programming 119 / 172

Using a while loop, the program can be rearranged as follows: 1... 2 int sum = 0; 3 int i = 1; 4 while (i <= 100) { 5 sum = sum + i; 6 ++i; 7 } 8... You should guarantee that the loop will terminate as expected. In practice, the number of loop steps (iterations) is unknown until the input data is given. Zheng-Liang Lu Java Programming 120 / 172

Malfunctioned Loops It is really easy to make an infinite loop. 1... 2 while (true); 3... The common errors of the loops are: never start never stop not complete exceed the expected number of iterations Zheng-Liang Lu Java Programming 121 / 172

Example Write a program which asks the sum of two random integers and lets the user repeatedly enter a new answer until correct. 1... 2 Scanner input = new Scanner(System.in); 3 int x = (int) (Math.random() 10); 4 int y = (int) (Math.random() 10); 5 int ans = x + y; 6 7 System.out.println(x + " + " + y + " =? "); 8 int z = input.nextint(); 9 10 while (z!= ans) { 11 System.out.println("Try again? "); 12 z = input.nextint(); 13 } 14 System.out.println("Correct."); 15 input.close(); 16... Zheng-Liang Lu Java Programming 122 / 172

Loop Design Strategy Writing a correct loop is not an easy task for novice programmers. Consider 3 steps when writing a loop: Find the pattern: identify the statements that need to be repeated. Wrap by loops: put these statements in the loop. Set the continuation condition: translate the criterion from the real world problem into computational conditions. 10 10 Not unique. Zheng-Liang Lu Java Programming 123 / 172

Sentinel-Controlled Loops Another common technique for controlling a loop is to designate a special value when reading and processing a set of values. This special input value, known as a sentinel value, signifies the end of the loop. For example, the operating systems and the GUI apps. Zheng-Liang Lu Java Programming 124 / 172

Example: Cashier Problem Write a program which sums over positive integers from consecutive inputs and then outputs the sum when the input is nonpositive. 1... 2 int total = 0, price = 0; 3 Scanner input = new Scanner(System.in); 4 5 System.out.println("Enter price?"); 6 price = input.nextint(); 7 while (price > 0) { 8 total += price; 9 System.out.println("Enter price?"); 10 price = input.nextint(); 11 // These two lines above repeat Line 5 and 6?! 12 } 13 14 System.out.println("Total = " + total); 15 input.close(); 16... Zheng-Liang Lu Java Programming 125 / 172

do-while Loops A do-while loop is similar to a while loop except that it does execute the loop body first and then checks the loop continuation condition. 1... 2 do { 3 // loop body 4 } while (condition); // Do not miss the semicolon! 5... Note that there is a semicolon at the end of the do-while loop. The do-while loops are also called posttest loops, in contrast to while loops, which are pretest loops. Zheng-Liang Lu Java Programming 126 / 172

Zheng-Liang Lu Java Programming 127 / 172

Example (Revisted) Write a program which sums over positive integers from consecutive inputs and then outputs the sum when the input is nonpositive. 1... 2 int total = 0, price = 0; 3 Scanner input = new Scanner(System.in); 4 5 do { 6 total += price; 7 System.out.println("Enter price?"); 8 price = input.nextint(); 9 } while (price > 0); 10 11 System.out.println("Total = " + total); 12 input.close(); 13... Zheng-Liang Lu Java Programming 128 / 172

for Loops A for loop generally uses a variable to control how many times the loop body is executed. 1... 2 for (init action; condition; increment) { 3 // loop body 4 } 5... init-action: declare and initialize a variable condition: set a criterion for loop continuation increment: how the variable changes after each iteration Note that these terms are separated by semicolons. Zheng-Liang Lu Java Programming 129 / 172

Sum from 1 to 100 Example Write a program which sums from 1 to 100. 1... 2 int sum = 0; 3 for (int i = 1; i <= 100; ++i) 4 sum = sum + i; 5... Compared to the while version, 1... 2 int sum = 0; 3 int i = 1; 4 while (i <= 100) { 5 sum = sum + i; 6 ++i; 7 } 8... Zheng-Liang Lu Java Programming 130 / 172

Zheng-Liang Lu Java Programming 131 / 172

Example: Selection Resided in Loop Display all even numbers Write a program which displays all even numbers smaller than 100. An even number is an integer of the form x = 2k, where k is an integer. Zheng-Liang Lu Java Programming 132 / 172

You may use the modular operator (%). 1... 2 for (int i = 1; i <= 100; i++) { 3 if (i % 2 == 0) System.out.println(i); 4 } 5... Also consider this alternative: 1... 2 for (int i = 2; i <= 100; i += 2) { 3 System.out.println(i); 4 } 5... How about odd numbers? Zheng-Liang Lu Java Programming 133 / 172

Numerical Example: Monte Carlo Simulation 11 Let m be the number of sample points falling in the region of the quarter circle shown in the next page, n be the total number of sample points. Use rand to generate a value between 0 and 1 (exclusive). Write a program which estimates π by ˆπ = 4 m n. Note that ˆπ π as n by the law of large numbers (LLN). 11 See https://en.wikipedia.org/wiki/monte_carlo_method. Zheng-Liang Lu Java Programming 134 / 172

Zheng-Liang Lu Java Programming 135 / 172

Numerical Example: Bisection Method for Root-Finding 13 Assume that f (x) = x 3 x 2. Consider to find a root between [a, b] = [1, 2] as initial guess. 12 Write a program which calculates the approximate root ˆr under this requirement by using the bisection method. In particular, you may set an error tolerance, say ɛ = 1e 9, to strike a balance between efficiency and accuracy. 12 For most of numerical algorithms, say Newton s method, an initial guess is a must. Even more, the solution is severely sensitive to the initial guess for some cases. 13 See https://en.wikipedia.org/wiki/bisection_method. Zheng-Liang Lu Java Programming 136 / 172

https://en.wikipedia.org/wiki/bisection method#/media/file:bisection method.svg Zheng-Liang Lu Java Programming 137 / 172

Jump Statements The keyword break and continue are often used in repetition structures to provide additional controls. break: the loop is terminated right after a break statement is executed. continue: the loop skips this iteration right after a continue statement is executed. In practice, jump statements in loops should be conditioned. Zheng-Liang Lu Java Programming 138 / 172

Example: Primality Test Write a program which determines if the input integer is a prime number. Let x > 1 be any natural number. Then x is said to be a prime number if x has no positive divisors other than 1 and itself. It is then straightforward to check if it is prime by dividing x by all natural numbers smaller than x. For speedup, you can divide x by only numbers smaller than x. (Why?) Zheng-Liang Lu Java Programming 139 / 172

1... 2 Scanner input = new Scanner(System.in); 3 System.out.println("Enter x > 2?"); 4 int x = input.nextint(); 5 boolean isprime = true; 6 input.close(); 7 8 double upperbd = Math.sqrt(x); 9 for (int y = 2; y < upperbd; y++) { 10 if (x % y == 0) { 11 isprime = false; 12 break; 13 } 14 } 15 16 if (isprime) { 17 System.out.println("Prime"); 18 } else { 19 System.out.println("Composite"); 20 } 21... Zheng-Liang Lu Java Programming 140 / 172

Exercise (Revisited) Redo the cashier problem by using an infinite loop with a break statement. 1... 2 while (true) { 3 System.out.println("Enter price?"); 4 price = input.nextint(); 5 if (price <= 0) break; 6 total += price; 7 } 8 System.out.println("Total = " + total); 9... Zheng-Liang Lu Java Programming 141 / 172

Another Example: Compounding Write a program which determines the holding years for an investment doubling its value. Let balance be the current amount, goal be the goal of this investment, and r be the annual interest rate. Then this investment should take at least n years so that the balance of the investment can double its value. Recall that the compounding formula is given by balance = balance (1 + r/100). Zheng-Liang Lu Java Programming 142 / 172

1... 2 int r = 18; // 18% 3 int balance = 100; 4 int goal = 200; 5 6 int years = 0; 7 while (balance <= goal) { 8 balance = (1 + r / 100.0); 9 years++; 10 } 11 12 System.out.println("Balance = " + balance); 13 System.out.println("Years = " + years); 14... Zheng-Liang Lu Java Programming 143 / 172

1... 2 int years = 0; // should be declared here; scope issue 3 for (; balance <= goal; years++) { 4 balance = (1 + r / 100.0); 5 } 6... 1... 2 int years = 1; // check this initial value 3 for (; true; years++) { 4 balance = (1 + r / 100.0); 5 if (balance > goal) break; 6 } 7... A for loop can be an infinite loop by setting true or simply leaving empty in the condition statement. An infinite for loop with an if-break statement is equivalent to a normal while loop. Zheng-Liang Lu Java Programming 144 / 172

Equivalence: while and for Loops (Concluded) In general, a for loop may be used if the number of repetitions is known in advance. If not, a while loop is preferred. Zheng-Liang Lu Java Programming 145 / 172

Nested Loops A loop can be nested inside another loop. Nested loops consist of an outer loop and one or more inner loops. Each time the outer loop is repeated, the inner loops are reentered, and started anew. Zheng-Liang Lu Java Programming 146 / 172

Example Multiplication table Write a program which displays the multiplication table. Zheng-Liang Lu Java Programming 147 / 172

Formatting Console Output You can use System.out.printf () to display formatted output on the console. 1... 2 double amount = 1234.601; 3 double interestrate = 0.00528; 4 double interest = amount interestrate; 5 System.out.printf("Interest = %4.2f", interest); 6... Zheng-Liang Lu Java Programming 148 / 172

By default, a floating-point value is displayed with 6 digits after the decimal point. Zheng-Liang Lu Java Programming 149 / 172

Multiple Items to Print Items must match the format specifiers in order, in number, and in exact type. If an item requires more spaces than the specified width, the width is automatically increased. By default, the output is right justified. You may try the plus sign (+), the minus sign (-), and 0 in the middle of format specifiers. Say % + 8.2f, % 8.2f, and %08.2f. Zheng-Liang Lu Java Programming 150 / 172

1... 2 public static void main(string[] args) { 3 for (int i = 1; i <= 9; ++i) { 4 for (int j = 1; j <= 9; ++j) { 5 System.out.printf("%3d", i j); 6 } 7 System.out.println(); 8 } 9 } 10... Zheng-Liang Lu Java Programming 151 / 172

Exercise: Coupled Loops Zheng-Liang Lu Java Programming 152 / 172

1 public class PrintStarsDemo { 2 public static void main(string[] args) { 3 // case (a) 4 for (int i = 1; i <= 5; i++) { 5 for (int j = 1; j <= i; j++) { 6 System.out.printf(" "); 7 } 8 System.out.println(); 9 } 10 11 // case (b), (c), (d) 12 // your work here 13 } 14 } Zheng-Liang Lu Java Programming 153 / 172

Analysis of Algorithms First, there may exist some algorithms for the same problem. Then we compare these algorithms. The first question is, Which one is more efficient? (Why?) We focus on the growth rate of the running time or space requirement as a function of the input size n, denoted by f (n). Zheng-Liang Lu Java Programming 154 / 172

O-notation 14 In math, O-notation describes the limiting behavior of a function when the argument tends towards a particular value or infinity, usually in terms of simpler functions. f (n) O(g(n)) as n if and only if there is a constant c > 0 and a real number n 0 such that f (n) c g(n) n n 0. (1) Note that O(g(n)) is a set featured by some simple function g(n). Hence f (n) O(g(n)) is equivalent to say that f (n) is one instance of O(g(n)). 14 See any textbook for data structures and algorithms or https://en.wikipedia.org/wiki/big_o_notation. Zheng-Liang Lu Java Programming 155 / 172

For example, 8n 2 3n + 4 O(n 2 ). We could say that 8n 2 3n + 4 O(n 3 ) and 8n 2 3n + 4 / O(n). Zheng-Liang Lu Java Programming 156 / 172

Common Fundamental Functions 15 15 See Table 4.1 and Figure 4.2 in Goodrich and etc, p. 161. Zheng-Liang Lu Java Programming 157 / 172

We use O-notation to describe the asymptotic 16 upper bound of complexity of the algorithm. So O-notation is widely used to classify algorithms by how they respond to changes in its input size. 17 Time complexity Space complexity Note that we often make a trade-off between time and space. Unlike time, we can reuse memory. 16 The asymptotic sense is that the input size n grows toward infinity. 17 Actually, there are Θ, θ, o, Ω, and ω which are used to classify algorithms. Zheng-Liang Lu Java Programming 158 / 172

References https://en.wikipedia.org/wiki/game_complexity https://en.wikipedia.org/wiki/p_versus_np_problem Zheng-Liang Lu Java Programming 159 / 172

1 class Lecture5 { 2 3 "Arrays" 4 5 } Zheng-Liang Lu Java Programming 160 / 172

Arrays An array stores a large collection of data which is of the same type. 1... 2 // assume the size variable exists above 3 T[] A = new T[size]; 4 // this creates an array of T type, referenced by A 5... T can be any data type. This statement comprises two parts: Declaring a reference Creating an array Zheng-Liang Lu Java Programming 161 / 172

Variable Declaration for Arrays In the left-hand side, it is a declaration for an array variable, which does not allocate real space for the array. In reality, this variable occupies only a certain space for the reference to an array. 18 If a reference variable does not refer to an array, the value of the variable is null. 19 In this case, you cannot assign elements to this array variable unless the array object has already been created. 18 Recall the stack and the heap in the memory layout. 19 Moreover, this holds for any reference variable. For example, the Scanner type. Zheng-Liang Lu Java Programming 162 / 172

Creating A Real Array All arrays of Java are objects. As seen before, the new operator returns the memory address of that object. Recall that the type of reference variables must be compatible to that of the array object. The variable size must be a positive integer for the number of elements. Note that the size of an array cannot be changed after the array is created. 20 20 Alternatively, you may try the class ArrayList, which is more useful in practice. Zheng-Liang Lu Java Programming 163 / 172

Array in Memory 1 int[] A = new int[3]; The array is allocated contiguously in the memory. All arrays are zero-based indexing. 21 (Why?) So we have A[0], A[1], and A[2]. 21 Same in C, C++, python, Javascript, and more. Zheng-Liang Lu Java Programming 164 / 172

Array Initializer The elements of arrays are initialized once created. By default, every element is assigned as follows: 0 for all numeric primitive data types \u0000 for char type false for boolean type An array can also be initialized by enumerating all the elements without using the new operator. For example, 1 int[] A = {1, 2, 3}; Zheng-Liang Lu Java Programming 165 / 172

Processing Arrays When processing array elements, we often use for loops. Recall that arrays are objects. They have an attribute called length which records the size of the arrays. For example, use A.length to get the size of A. Since the size of the array is known, it is natural to use a for loop to manipulate with the array. Zheng-Liang Lu Java Programming 166 / 172

Many Examples Initialization of arrays by a Scanner object 1... 2 // let x be an integer array with a certain size 3 for (int i = 0; i < A.length; ++i) { 4 A[i] = input.nextint(); 5 } 6... Initialization of arrays by random numbers 1... 2 for (int i = 0; i < A.length; ++i) { 3 A[i] = (int) (Math.random() 10); 4 } 5... Zheng-Liang Lu Java Programming 167 / 172

Display of array elements 1... 2 for (int i = 0; i < A.length; ++i) { 3 System.out.printf("%3d", A[i]); 4 } 5... Sum of array elements 1... 2 int sum = 0; 3 for (int i = 0; i < A.length; ++i) { 4 sum += A[i]; 5 } 6... Zheng-Liang Lu Java Programming 168 / 172

Extreme values in the array 1... 2 int max = A[0]; 3 int min = A[0]; 4 for (int i = 1; i < A.length; ++i) { 5 if (max < A[i]) max = A[i]; 6 if (min > A[i]) min = A[i]; 7 } 8... How about the location of the extreme values? Can you find the 2nd max of A? Can you keep the first k max of A? Zheng-Liang Lu Java Programming 169 / 172

Shuffling over array elements 1... 2 for (int i = 0; i < A.length; ++i) { 3 // choose j randomly 4 int j = (int) (Math.random() A.length); 5 // swap 6 int tmp = A[i]; 7 A[i] = A[j]; 8 A[j] = tmp; 9 } 10... How to swap values of two variables without tmp? However, this naive algorithm is biased. 22 22 See https://blog.codinghorror.com/the-danger-of-naivete/. Zheng-Liang Lu Java Programming 170 / 172

Exercise Deck of Cards Write a program which picks first 5 cards at random from a deck of 52 cards. 4 suits: Spade, Heart, Diamond, Club 13 ranks: 3,..., 10, J, Q, K, A, 2 Label 52 cards by 0, 1,, 51 Shuffle the numbers Deal the first 5 cards Zheng-Liang Lu Java Programming 171 / 172

1... 2 String[] suits = {"Spade", "Heart", "Diamond", "Club"}; 3 String[] ranks = {"3", "4", "5", "6", "7", 4 "8", "9", "10", "J", "Q", "K", 5 "A", "2"}; 6 7 int size = 52; 8 int[] deck = new int[size]; 9 for (int i = 0; i < deck.length; i++) 10 deck[i] = i; 11 12 // shuffle over deck; correct version 13 for (int i = 0; i < size 1; i++) { 14 int j = (int) (Math.random() (size i)) + i; 15 int z = deck[i]; 16 deck[i] = deck[j]; 17 deck[j] = z; 18 } 19 20 for (int i = 0; i < 5; i++) { 21 String suit = suits[deck[i] / 13]; 22 String rank = ranks[deck[i] % 13]; 23 System.out.printf("% 3s%8s\n", rank, suit); 24 } 25... Zheng-Liang Lu Java Programming 172 / 172