Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
CS 180 Problem Solving and Object Oriented Programming Fall 2011 http://www.cs.purdue.edu/homes/apm/courses/CS180Fall2011/ This Week: Notes for Week 15: Nov 28-Dec 2, 2011 Aditya Mathur Department of Computer Science Purdue University West Lafayette, IN, USA 11/28-30 1. 2. 3. Exceptions Recursion Dynamic data structures Readings and Exercises for Week 15 Readings: Chapter: 8.4, 12.1, 12.2, 12.3; 18.1, 18.8 Exercises: 8.6, 12.2, 12.3, 18.1, 18.10 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 2 Announcements • Project 5 due on Tuesday Dec 6, 11:59pm. Implement incrementally. • Please DO attend the class on Monday Dec 5. • Programming competition. Chief Guest Dr. Tim Korb. • Details of Final Exam on Wednesday Dec 7. • Please complete course evaluation. Thanks. • Special class. Sunday Dec 11, 2011. 4pm. LWSN 3102AB 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 3 Exam 2 Statistics Average: 75.8 Median: 83 Std Dev: 21.44 A+: 100/98 A: 97/94 A-: 93/90 B+: 89/87 B: 86/82 B-: 81/78 C+: 77/73 C: 72/67 C-: 66/56 D: 55/40 F: 39/0 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 4 Exceptions 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 5 Exceptions An abnormal or unexpected condition during execution. When such a condition occurs, Java run time system does not always know how best to proceed and hence raises an exception. Some exceptions must be explicitly handled by the programmer. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 6 Exception: Example 1 public class ExceptionExampleDiv0{ public static void main(String [] args){ int y=1, z=0; int x=y/z; } } java.lang.ArithmeticException: / by zero at ExceptionExampleDiv0.main(ExceptionExampleDiv0.java:8) 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 7 Exception: Example 2 public class ExceptionExampleDiv0{ public static void main(String [] args){ int y=1, z=0; try{ int x=y/z; Try-catch not required }catch(ArithmeticException e){ System.out.println(“Divide by zero:”+e); } } Divide by zero java.lang.ArithmeticException: / by zero 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 8 Exception: Unchecked (or Error) • Arise during runtime due to some programming error. • Not flagged by the compiler. Programmer may choose to handle these. • Not subject to Catch requirement. Examples: ArithmeticException ArrayIndexOutOfBounds NullPointerException 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 9 Exception: Example 3 public class ExceptionExampleFile{ public static void main(String [] args){ File f=new File("test.txt"); Scanner source=new Scanner(f); } } 1 error found: File: /Users/apm/www/courses/CS180Fall2010/Notes/Programs/Exc eptions/ExceptionExampleFile.java [line: 8] Error: ©Aditya Mathur. CS 180. Fall 2011. Week /Users/apm/www/courses/CS180Fall2010/Notes/Programs/Exc 11/28/2011 10 15 Exception: Example 4 public class ExceptionExampleFile{ public static void main(String [] args){ File f=new File("test.txt"); try{ Scanner source=new Scanner(f); }catch(FileNotFoundException e){ System.out.println("File not found "+e); } } } 11/28/2011 File not found java.io.FileNotFoundException: test.txt (No such file or directory) ©Aditya Mathur. CS 180. Fall 2011. Week 15 11 Exception: Checked exceptions These are subject to the catch requirement. Programmer is expected to write code to recover from these exceptions. Example: FileNotFoundException 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 12 Exception: try-catch try{ code where exception might occur; try-block }catch(exception object){ code to handle exception catch-block } A catch-block serves as an exception handler. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 13 Exception: try-catch: multiple catch blocks try{ code where exception might occur; try-block }catch(exception object){ code to handle exception; catch-block }catch(another exception object){ code to handle exception; } 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 Another catchblock 14 Exception: try-catch-finally try{ Code where exception might occur; try-block }catch(exception object){ code to handle exception; catch-block }finally{ code to handle exception; finally-block } finally-block always executes after the try-catch blocks (unless the program exits prior to the control arriving at the finally block). 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 15 Exception: Not handled public ExceptionTest(){ Scanner s=new Scanner(new File (“DoesNotExist”)); } Error: /Users/apm/www/courses/CS180Fall2011/Notes/Programs/Recur sion/Tree/ExceptionTest.java:7: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 16 Exception: Throwing public ExceptionTest() throws Exception{ Scanner s=new Scanner(new File (“DoesNotExist”)); } A method…NOT a class…can throw an Exception. This will compile…. BUT… 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 17 Exception: Throwing but not handling later public ExceptionTest() throws Exception{ Scanner s=new Scanner(new File (“DoesNotExist”); } public static void main(String [] arg){ new ExceptionTest(); } Error: /Users/apm/www/courses/CS180Fall2011/Notes/Programs/Recur sion/Tree/ExceptionTest.java:11: unreported exception java.lang.Exception; must be caught or declared to be thrown… 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 18 Exception: Throwing but handling later public ExceptionTest() throws Exception{ Scanner s=new Scanner(new File (“DoesNotExist”); } public static void main(String [] arg){ try{ new ExceptionTest(); }catch(Exception e){ } 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 19 Recursion 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 20 What is recursion? Recursion is a technique to code functions (or methods) in Java. We say that a method is recursive, when it calls itself. This is known as direct recursion. Indirect recursion occurs when a method is called, before it completes, by another method. Recursion is complementary to iteration. While solving a problem, you may choose to use either. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 21 Example: Factorial Definition: Iterative [n>=0] !n= 1, if n=0 or 1 = 1*2*3*…*n; Definition: Recursive [n>=0] !n= 1, if n=0 or 1 = n*!(n-1), if n>1 11/28/2011 Basis Recursion ©Aditya Mathur. CS 180. Fall 2011. Week 15 22 Example: Factorial: Iterative method Definition: Iterative [n>=0] !n= 1, if n=0 or 1 = 1*2*3*…*n; otherwise public int factIter(int n){ if(n==0 || n==1) return 1; int prod=1; for (int i=2; i<=n; i++){ prod=prod*i; } return (prod); } !5=prod=1*2*3*4*5 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 23 Example: Factorial: Recursive method Definition: Recursive [n>=0] !n= 1, if n=0 or 1 = n*!(n-1), if n>1 public int factRecur(int n){ if(n==0 || n==1){ return 1; }else{ return (n*factRecur(n-1)); } } factRecur(5)=5*factRecur(4)*factRecur(3)*factRecur(2)*factRecur(1) =5*factRecur(4)*factRecur(3)*factRecur(2)*1 =5*factRecur(4)*factRecur(3)*2*1 =5*factRecur(4)*3*2*1 =5*4*3*2*1 ©Aditya Mathur. CS 180. Fall 2011. Week 11/28/2011 24 15 Recursion versus Iteration Iteration suffices for most problems that arise in practice. However, in some cases recursion allows compact and quick solution. An example follows. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 25 Announcements • Feast with faculty today at 6:30pm Ford Dining Hall. All are welcome. • Project 4 grades are on Blackboard. If your submitted program was working but you received a low grade then please contact TA Julian Stephen. • 11/28/2011 Programming competition: Round 2: Saturday 6pm. LWSN 3102. Three teams will be selected for the final round. ©Aditya Mathur. CS 180. Fall 2011. Week 15 26 Towers of Hanoi: The problem Given: Three towers A, B, and C. A contains n discs arranged from bottom to top as shown below. Problem: Find a sequence of moves such that at the end of these moves all discs are in C. No larger disc should ever be on top of a smaller disk. Only one disk can be moved at a time from one tower to another. Only the top disc can be moved from a tower. A 11/28/2011 B ©Aditya Mathur. CS 180. Fall 2011. Week 15 C 27 Towers of Hanoi: Initial and final configurations Initial configuration A B C A B C Final configuration 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 28 Towers of Hanoi: Iterative solution Try this! This will be difficult but certainly worth a try. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 29 Towers of Hanoi: Recursive solution What is a move? Only one disc can be moved from one tower to another. Hence we will write a move as: moveADisc (TA, TB); TA is the tower from where the top disc is moved and placed on top in tower TB. move (TA, TB, TC, n); This will move n discs from tower TA to tower TB via tower TC while ensuring the constraints. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 30 Towers of Hanoi: Recursive solution: Visualization Start 1 3 A B C 2 A B C A B C 4 A 11/28/2011 B C ©Aditya Mathur. CS 180. Fall 2011. Week 15 31 Towers of Hanoi: Recursive program: Live 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 32 Towers of Hanoi: Challenge! How many moves are required to move n discs from tower A to tower C? 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 33 Recursion and Dynamic data structures 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 34 Dynamic data structures Static data structure: Array Useful when size of the data structure is not known in advance. Useful for designing efficient algorithms. Examples: Stack, Linked list, binary tree, etc. In Java: ArrayList, Vector 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 35 Tree (Binary) Tree with one node (the root) Left link Right link Tree with a root linked to two other nodes. Another tree. Left link 11/28/2011 Right link ©Aditya Mathur. CS 180. Fall 2011. Week 15 36 Tree: with data 25 Tree with one node (the root) 25 Right link Left link 14 Tree with a root linked to two other nodes. 39 Another tree. 25 Left link 14 Right link 39 Do you see a pattern? 9 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 37 Tree: Binary search 25 Left link 14 9 11/28/2011 Right link Does x exist in the tree? 39 boolean find(int x, Node root){ if(x is at the root) return true; if (x< value at the root) return find (x, root.leftLink); else return find(x, root.rightLink); } ©Aditya Mathur. CS 180. Fall 2011. Week 15 38 Binary search tree: Creation Left and right links are null. 25 Add 25. Start with an empty tree and add a node. Set root to be this node. 25 39 25 Left link 14 11/28/2011 Add 39. This is greater than the number at the root. Hence add a new node to the right subtree. Add 14. As this is less than the value at the root, add a Right link new node to the left of the 39 root. Each data item exists exactly once ©Aditya Mathur. CS 180. Fall 2011. Week in the tree. 39 15 Tree: Non-empty binary search tree Has a root Each node has 0, 1, or 2 links. Links are generally termed as left and right links. Each node has a data item in it. Suppose that node n points to nodes n1 (left) and n2 (right). Then the data at node n1 is less than that at n and the data at node n2 is greater than that at node n. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 40 Binary search tree creation: Exercise What will a binary search tree look like after the following numbers are added in this sequence given: 5, 29, -4, 23, 99, 3? 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 41 Live demo: Tree creation and traversal. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 42 Week 15: November 28-Dec 2, 2011 Hope you enjoyed this week! Questions? Contact your recitation instructor. Make full use of our office hours. 11/28/2011 ©Aditya Mathur. CS 180. Fall 2011. Week 15 43