22
CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

  • View
    217

  • Download
    2

Embed Size (px)

Citation preview

Page 1: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

CS 106Introduction to Computer Science I

11 / 09 / 2007

Instructor: Michael Eckmann

Page 2: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Michael Eckmann - Skidmore College - CS 106 - Fall 2007

Today’s Topics• Comments and/or Questions?• DecimalFormat class• ternary conditional operator• recursion

Page 3: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

DecimalFormat class• Let's look online at the Java API for this class (and others)• Allows us to make output nicer by rounding floats and doubles etc.

for output• Specify a pattern when creating an object of DecimalFormat class• 0 vs. #

– 0 is a required digit position

• To the left of decimal --- means at least that many

• To the right of decimal --- means exactly that many places

– # to the right of decimal means that a 0 will not display.

• % at end of pattern causes number to be displayed as a percent

• E-notation is also possible (scientific notation)

Page 4: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

DecimalFormat class• DecimalFormat df = new DecimalFormat(“00.00”);

• To use it : (assuming we have a double var temperature)

– df.format(temperature)

/* this will return a String based on the value of temperature and the pattern specified when the df object was constructed */

– Since it returns a String we can place it anywhere a String can be used, like:

System.out.println("The temperature is: " + df.format(temperature));

Page 5: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

DecimalFormat class• Let's try a few different formats and see what is produced.• Note: no truncation of numbers to the LEFT of the

decimal point will ever occur with this formatting even if we have:

– the format is 00.0#

– assume the value to format is 365.2512

– The number will be formatted as 365.25 because the amount of 0's to the LEFT of the decimal in the format means at least that many places.

Page 6: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Ternary operator (acts like if /else )

– Ternary conditional operator contains three parts separated by a ? and a :

Example:

int hour = 14, non_mil_hr;

non_mil_hr = ((hour == 12 || hour == 0) ? 12 : hour % 12 );

Page 7: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

overloading methods• recall that we overloaded the constructor --- what did that

mean?

• we can do the same with any method.

Page 8: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

overloading methods• recall that we overloaded the constructor --- what did that mean?

• we can do the same with any method.

– we give a method the same name but different number of parameters and/or types of parameters. Order matters. names of parameters do not. A method's signature must be unique. Signature includes name of method, and types of parameters in order.

– e.g.

• public void meth1(int i, int j)

• public void meth1(int j)

• public void meth1(String s, int i, int j)

• public void meth1(int i, String s, int j)

• public void meth1(int j, int k) – // this last one not allowed b/c signature is same as first one.

Page 9: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using iteration//non-recursive solution to the factorial problempublic int compute_factorial(int num){

int temp_factorial=1;while (num > 0)

{temp_factorial = temp_factorial * num;num--;

}return temp_factorial;

}

Page 10: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using iteration

Let's put this in a program and call it.

Page 11: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion

• A recursive method is a method that calls itself (directly or indirectly.)

• Recursion is often used when the problem to be solved can be easily implemented with recursion as opposed to an iterative technique.

• Another fact is all problems that can be solved recursively can be solved iteratively.

• Sometimes though the iterative solution might be very long and require lots of code. In that case recursion might be preferred because it is more readable and easier to write.

Page 12: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion• Let’s say we know the solution to some case of a

problem. • If we want to find a solution to a slightly more

complex case of the problem, we might be able to use the solution to the easier problem as part of our solution.

• For example, if we know the factorial of the number 6, to find the factorial of 7, we can just multiply 7 * the factorial of 6, so 7! = 7 * 6!.

• Here, the solution we know (6! = 720) is used as part of the solution to 7!, which is 7*720 = 5040.

Page 13: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion

• So, more generally, if we know the solution to (n-1)! We can easily find the solution to n! by just multiplying n*(n-1)!.

• In addition to knowing this though, we need to also know that 1! = 1. This is the simplest factorial.

• Now, powered with the knowledge that – 1! = 1 and – the fact that given (n-1)!, we can compute n!

we have enough information to compute the factorial of any positive integer.

• Do we all agree?

Page 14: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion

• This is a recursive solution to the factorial problem because

–we know how to solve the simplest case (1!) and–we know how to solve a more complex case given a

solution to a slightly less complex case • n! = n*(n-1)!

Page 15: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using recursion

public int compute_factorial ( int num ){

if ( num <= 1 )

return 1;

else

return num * compute_factorial ( num - 1) ;

}

// this recursive method is based on figure 6.12

// in Deitel and Deitel.

Page 16: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using recursion

• When the recursive method is called, if the number passed in as an argument is less than or equal to 1, then 1 is returned and the method ends.

• That is known as the base case.

• If the number passed in as an argument is greater than 1, then the else portion of the method is executed. This says to return that number times the result of another call to the method with the argument of one less than the original value.

• The else portion in this method is known as the recursion step.

Page 17: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using recursion

• Let’s examine what happens when the number 2 is passed in as an argument to compute_factorial.

int fact_value; fact_value = compute_factorial( 2 );

• The method would check if 2 <= 1 and since that is false, the else portion would execute.

• The else portion calls compute_factorial(1).

• This second call to the method invokes another “copy” of the method. This second call checks if 1 <= 1 and this is true so it returns 1.

Page 18: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using recursion• This value of 1 gets returned to the most recent call (and

hence the second call to the method ends its execution.)

• This value of 1 gets multiplied by 2. This happens in the else portion of the method.

• The result, 2, gets returned to the original call of the method (and hence the first call to the method ends its execution.)

• If compute_factorial was called with the number 3 as an argument, the method would end up being called three times.

Page 19: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion• When the method is recursively called in the else portion,

the prior call to the method has not finished executing. It is waiting on the result of this new method call.

• There will be multiple active copies of the recursive method when the else portion executes.

• The recursion ends when the base case is finally met. The base case then returns a result to the previous call of the method and a sequence of returns occurs until the original method call gets its returned value.

Page 20: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Factorial method using recursion

• Let’s look at a program that will illustrate, through print statements, what happens in what order when a method is called recursively.

Page 21: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion

• We may come back to recursion in other problems later in the semester.

• Understand that the Factorial example, was for instructional purposes only, since it is a very simple example of recursion.

• For the factorial method, in practice, we would always prefer the non-recursive (iterative) solution. It is more efficient in terms of both time and space.

• Recursive solutions often take more time to run, because making a method call is slower and requires more memory than doing the same statements without a method call.

Page 22: CS 106 Introduction to Computer Science I 11 / 09 / 2007 Instructor: Michael Eckmann

Recursion

• Direct vs. indirect recursion

–When a method calls itself, it is direct recursion

–When method1 calls method2 and method2 calls method1, it is indirect.

–There can be more than just two methods involved in the indirection.