950 likes | 1.06k Views
Programming Fundamentals I (COSC-1336), Lecture 5 (prepared after Chapter 5 of Liang’s 2011 textbook). Stefan Andrei. Overview of Previous Lecture. To write programs for executing statements repeatedly using a while loop (§4.2).
E N D
Programming Fundamentals I (COSC-1336), Lecture 5 (prepared after Chapter 5 of Liang’s 2011 textbook) Stefan Andrei COSC-1336, Lecture 5
Overview of Previous Lecture • To write programs for executing statements repeatedly using a while loop (§4.2). • To develop a program for GuessNumber and SubtractionQuizLoop (§4.2.1). • To follow the loop design strategy to develop loops (§4.2.2). • To develop a program for SubtractionQuizLoop (§4.2.3). • To control a loop with a sentinel value (§4.2.3). • To obtain large input from a file using input redirection rather than typing from the keyboard (§4.2.4). • To write loops using do-while statements (§4.3). COSC-1336, Lecture 5
Overview of Previous Lecture (cont) • To write loops using for statements (§4.4). • To discover the similarities and differences of three types of loop statements (§4.5). • To write nested loops (§4.6). • To learn the techniques for minimizing numerical errors (§4.7). • To learn loops from a variety of examples (GCD, FutureTuition, MonteCarloSimulation) (§4.8). • To implement program control with break and continue (§4.9). • (GUI) To control a loop with a confirmation dialog (§4.10). COSC-1336, Lecture 5
Motivation of the current lecture • Find the sum of integers from 1 to 10, from 20 to 30, and from 35 to 45, respectively. COSC-1336, Lecture 5
First Attempt int sum = 0; for (int i = 1; i <= 10; i++) sum += i; System.out.println("Sum from 1 to 10 is " + sum); sum = 0; for (int i = 20; i <= 30; i++) sum += i; System.out.println("Sum from 20 to 30 is " + sum); sum = 0; for (int i = 35; i <= 45; i++) sum += i; System.out.println("Sum from 35 to 45 is " + sum); COSC-1336, Lecture 5
Problem int sum = 0; for (int i = 1; i <= 10; i++) sum += i; System.out.println("Sum from 1 to 10 is " + sum); sum = 0; for (int i = 20; i <= 30; i++) sum += i; System.out.println("Sum from 20 to 30 is " + sum); sum = 0; for (int i = 35; i <= 45; i++) sum += i; System.out.println("Sum from 35 to 45 is " + sum); COSC-1336, Lecture 5
Solution public static int sum(int i1, int i2) { int sum = 0; for (int i = i1; i <= i2; i++) sum += i; return sum; } public static void main(String[] args) { System.out.println("Sum from 1 to 10 is " + sum(1, 10)); System.out.println("Sum from 20 to 30 is " + sum(20, 30)); System.out.println("Sum from 35 to 45 is " + sum(35, 45)); } COSC-1336, Lecture 5
Overview of This Lecture • To define methods, invoke methods, and pass arguments to a method (§5.2-5.5). • To develop reusable code that is modular, easy-to-read, easy-to-debug, and easy-to-maintain. (§5.6). • To use method overloading and understand ambiguous overloading (§5.7). • To design and implement overloaded methods (§5.8). COSC-1336, Lecture 5
Overview of This Lecture (cont.) • To determine the scope of variables (§5.9). • To know how to use the methods in the Math class (§§5.10-5.11). • To learn the concept of method abstraction (§5.12). • To design and implement methods using stepwise refinement (§5.12). COSC-1336, Lecture 5
Defining Methods • A method is a collection of statements that are grouped together to perform an operation. COSC-1336, Lecture 5
Method Signature • Method signature is the combination of the method name and the parameter list. COSC-1336, Lecture 5
Formal Parameters • The variables defined in the method header are known as formal parameters. COSC-1336, Lecture 5
Actual Parameters • When a method is invoked, you pass a value to the parameter. • This value is referred to as actual parameter or argument. COSC-1336, Lecture 5
Return Value Type • A method may return a value. • The return value typeis the data type of the value the method returns. • If the method does not return a value, the return value typeis the keyword void. • For example, the return value type in the main() method is void. COSC-1336, Lecture 5
Calling Methods • Testing the max() method; • This program demonstrates calling a method max to return the largest of the int values. COSC-1336, Lecture 5
animation Calling Methods (cont.) COSC-1336, Lecture 5
animation Trace Method Invocation i is now 5 COSC-1336, Lecture 5
animation Trace Method Invocation j is now 2 COSC-1336, Lecture 5
animation Trace Method Invocation invoke max(i, j) COSC-1336, Lecture 5
animation Trace Method Invocation invoke max(i, j) Pass the value of ito num1 Pass the value of j to num2 COSC-1336, Lecture 5
animation Trace Method Invocation declare variable result COSC-1336, Lecture 5
animation Trace Method Invocation (num1 > num2) is true since num1 is 5 and num2 is 2 COSC-1336, Lecture 5
animation Trace Method Invocation result is now 5 COSC-1336, Lecture 5
animation Trace Method Invocation return result, which is 5 COSC-1336, Lecture 5
animation Trace Method Invocation return max(i, j) and assign the return value to k COSC-1336, Lecture 5
animation Trace Method Invocation Call the println() method COSC-1336, Lecture 5
CAUTION • A return statement is required for a value-returning method. • The method shown below in (a) is logically correct, but it has a compilation error because the Java compiler thinks it possible that this method does not return any value. • To fix this problem, delete if (n < 0) in (a), so that the compiler will see a return statement to be reached regardless of how the ifstatement is evaluated. COSC-1336, Lecture 5
Reuse Methods from Other Classes • NOTE: One of the benefits of methods is for reuse. • The max() method can be invoked from any class besides TestMax. • If you create a new class Test, you can invoke the max() method using ClassName.methodName (e.g., TestMax.max). COSC-1336, Lecture 5
Call Stacks COSC-1336, Lecture 5
animation Trace Call Stack i is declared and initialized COSC-1336, Lecture 5
animation Trace Call Stack j is declared and initialized COSC-1336, Lecture 5
animation Trace Call Stack Declare k COSC-1336, Lecture 5
animation Trace Call Stack Invoke max(i, j) COSC-1336, Lecture 5
animation Trace Call Stack pass the values of i and j to num1 and num2 COSC-1336, Lecture 5
animation Trace Call Stack declare variable result COSC-1336, Lecture 5
animation Trace Call Stack (num1 > num2) is true COSC-1336, Lecture 5
animation Trace Call Stack Assign num1 to result COSC-1336, Lecture 5
animation Trace Call Stack Return result and assign it to k COSC-1336, Lecture 5
animation Trace Call Stack Call the println() method COSC-1336, Lecture 5
void Method Example • This type of method does not return a value. • The method performs some actions. • publicclass TestVoidMethod { • publicstaticvoid main(String[] args) { • System.out.print("The grade is "); • printGrade(78.5); • System.out.print("The grade is "); • printGrade(59.5); • } • // . . . public static void printGrade() • } COSC-1336, Lecture 5
Method public static void printGrade() publicstaticvoid printGrade(double score) { if (score >= 90.0) { System.out.println('A'); } elseif (score >= 80.0) { System.out.println('B'); } elseif (score >= 70.0) { System.out.println('C'); } elseif (score >= 60.0) { System.out.println('D'); } else { System.out.println('F'); } } COSC-1336, Lecture 5
Compiling and running TestVoidMethod.java COSC-1336, Lecture 5
Passing Parameters public static void nPrintln(String message, int n) { for (int i = 0; i < n; i++) System.out.println(message); } • Suppose you invoke the method using • nPrintln("Welcome to Java", 5); • What is the output? • Suppose you invoke the method using • nPrintln("Computer Science", 15); • What is the output? COSC-1336, Lecture 5
Pass by Value • This program demonstrates passing values to the methods. • publicclass Increment { • publicstaticvoid main(String[] args) { • int x = 1; • System.out.println("Before the call, x is " + x); • increment(x); • System.out.println("after the call, x is " + x); • } • publicstaticvoid increment(int n) { • n++; • System.out.println("n inside the method is " + n); • } • } COSC-1336, Lecture 5
Compiling and running Increment.java COSC-1336, Lecture 5
Pass by Value • Testing Pass by value. • This program demonstrates passing values to the methods. • public class TestPassByValue { • public static void main(String[] args) { • int num1 = 1, num2 = 2; • System.out.println("Before invoking the swap method, num1 is " + num1 + " and num2 is " + num2); • swap(num1, num2); • System.out.println("After invoking the swap method, num1 is " + num1 + " and num2 is " + num2); • } • // . . . • } COSC-1336, Lecture 5
public static void swap() /** Swap two variables */ public static void swap(int n1, int n2) { System.out.println("\tInside the swap method"); System.out.println("\t\tBefore swapping n1 is " + n1 + " n2 is " + n2); int temp = n1; n1 = n2; n2 = temp; System.out.println("\t\tAfter swapping n1 is " + n1 + " n2 is " + n2); } COSC-1336, Lecture 5
Compiling and running TestPassByValue.java COSC-1336, Lecture 5
Pass by Value (cont.) COSC-1336, Lecture 5
Modularizing Code • Methods can be used to reduce redundant coding and enable code reuse. • Methods can also be used to modularize code and improve the quality of the program. COSC-1336, Lecture 5