cs 2334 lab 5
play

CS 2334: Lab 5 Exceptions Andrew H. Fagg: CS2334: Lab 5 1 - PowerPoint PPT Presentation

CS 2334: Lab 5 Exceptions Andrew H. Fagg: CS2334: Lab 5 1 Exceptions Remember when an Exception is thrown: The normal execution of code stops The JVM begins to search the call stack for a catch statement that matches the Exception


  1. CS 2334: Lab 5 Exceptions Andrew H. Fagg: CS2334: Lab 5 1

  2. Exceptions Remember – when an Exception is thrown: • The normal execution of code stops • The JVM begins to search the call stack for a catch statement that matches the Exception • This search can extend across methods • If a matching catch is found: • The catch block is executed • Execution then proceeds after the try/catch that caught the exception Andrew H. Fagg: CS2334: Lab 5 2

  3. Exceptions • If a matching catch is found: • The catch block is executed • Execution then proceeds after the try/catch that caught the exception • If a match is not found in the call stack, the program halts Andrew H. Fagg: CS2334: Lab 5 3

  4. Throwable Cla lass: Key Methods • Return the message associated with the Exception: public String getMessage() • Return information about the Exception (includes the message): public String toString() • Print out the entire stack up to the point where the Exception was thrown: public void printStackTrace() Andrew H. Fagg: CS2334: Lab 5 4

  5. Example Recall from lecture: static int getIntFromUser(BufferedReader br) throws IOException{ String strg = br.readLine(); int i = Integer.parseInt(strg); return i; } • Return an entered int or throw an Exception • NumberFormatException: user entered something other than a number Andrew H. Fagg: CS2334: Lab 5 5

  6. Example: Receiving Two In Ints and Dividing One by the Other public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int val1, val2, result; System.out.println("Please enter a pair of numbers on separate lines."); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; System.out.println("Result: " + result); } What can go wrong? How do we fix it? Andrew H. Fagg: CS2334: Lab 5 6

  7. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 7

  8. boolean flag = true; Loop until a pair of valid ints is entered try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 8

  9. boolean flag = true; Do the work: receive two ints and divide try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 9

  10. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); If we get here, then we result = val1/val2; are successful flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 10

  11. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); If one of the ints is a val1 = getIntFromUser(br); val2 = getIntFromUser(br); problem, then we will result = val1/val2; print error and repeat flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 11

  12. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } If successful, then stop looping }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 12

  13. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } Print result of division }while(flag); System.out.println("Result: " + result); }catch(ArithmeticException e){ System.out.println("Divide by zero error."); System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 13

  14. boolean flag = true; try{ do{ try{ System.out.println("Please enter a pair of …”); val1 = getIntFromUser(br); val2 = getIntFromUser(br); result = val1/val2; flag = false; }catch(NumberFormatException e){ System.out.println("Numbers only!"); } Catch the divide by }while(flag); zero error. In this System.out.println("Result: " + result); }catch(ArithmeticException e){ case, don’t prompt System.out.println("Divide by zero error."); again System.exit(0); } Andrew H. Fagg: CS2334: Lab 5 14

  15. Lab 5: : Calculator with Error Checking Loop: • Prompt user to enter a mathematical operator and one/two operands (parameters) • Perform the operation with the parameters • Print the result • Quit when told to Andrew H. Fagg: CS2334: Lab 5 15

  16. Operations Addition: 1 x y Subtraction: 2 x y Multiplication: 3 x y Division: 4 x y Power: 5 x y Factorial: 6 x Quit: 7 Andrew H. Fagg: CS2334: Lab 5 16

  17. Error Checking Must address: • Illegal operator • Illegal parameters • Incorrect number of parameters Andrew H. Fagg: CS2334: Lab 5 17

  18. Lab 5 Im Implementation Andrew H. Fagg: CS2334: Lab 5 18

  19. Class: CalculatorException • Extends Exception • Adds one more instance variable: exitFlag • True if the program should exit • Constructors: • String message • String message and exitFlag • Appropriate getters • Note that Exception already provides one that you will need Andrew H. Fagg: CS2334: Lab 5 19

  20. CalculatorOperations • Provides static method for performing a single operation • Input: array of Strings • 0: String containing operator • 1: first parameter (if needed) • 2: second parameter (if needed) • Output: result of executing operator on parameters • Throws: CalculatorException • If there is an error in interpreting the inputs • If the number of inputs is incorrect • If the user has specified that the program should exit Andrew H. Fagg: CS2334: Lab 5 20

  21. Driver: main() Loop: • Receive a line of input from the user • Split the line into substrings (spaces separate the items) • Calls method to perform calculation • Addresses any Exceptions that might be thrown Andrew H. Fagg: CS2334: Lab 5 21

  22. • Demonstration… Andrew H. Fagg: CS2334: Lab 5 22

  23. Im Implementation Process • Implement Driver and the CalculatorOperations classes first assuming that there are no Exceptions to address • Implement CalculatorOperationsTest (a JUnit test) • Implement CalculatorException and CalculatorExceptionTest • Modify the Driver and CalculatorOperations classes to address exceptions • performOperation() must only throw CalculatorExceptions • Driver.main() must only catch CalculatorExceptions Andrew H. Fagg: CS2334: Lab 5 23

  24. Submission • Submit only one file: lab5.zip (casing matters) • Due date: Friday, September 25 th @11:59pm • Submit to lab5 dropbox on D2L Andrew H. Fagg: CS2334: Lab 5 24

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend