Download presentation
Presentation is loading. Please wait.
Published byDustin Tutton Modified over 10 years ago
1
Module 4: Statements and Exceptions
2
Overview Introduction to Statements Using Selection Statements Using Iteration Statements Using Jump Statements Handling Basic Exceptions Raising Exceptions
3
Introduction to Statements Statement Blocks Types of Statements
4
Statement Blocks Use braces As block delimiters { // code } { // code } { int i;... { int i;... } { int i;... { int i;... } { int i;... }... { int i;... } { int i;... }... { int i;... } A block and its parent block cannot have a variable with the same name Sibling blocks can have variables with the same name
5
Types of Statements Selection Statements The if and switch statements Selection Statements The if and switch statements Iteration Statements The while, do, for, and foreach statements Iteration Statements The while, do, for, and foreach statements Jump Statements The goto, break, and continue statements Jump Statements The goto, break, and continue statements
6
Using Selection Statements The if Statement Cascading if Statements The switch Statement Quiz: Spot the Bugs
7
The if Statement Syntax: No implicit conversion from int to bool int x;... if (x)... // Must be if (x != 0) in C# if (x = 0)... // Must be if (x == 0) in C# int x;... if (x)... // Must be if (x != 0) in C# if (x = 0)... // Must be if (x == 0) in C# if ( Boolean-expression ) first-embedded-statement else second-embedded-statement if ( Boolean-expression ) first-embedded-statement else second-embedded-statement
8
Cascading if Statements enum Suit { Clubs, Hearts, Diamonds, Spades } Suit trumps = Suit.Hearts; if (trumps == Suit.Clubs) color = "Black"; else if (trumps == Suit.Hearts) color = "Red"; else if (trumps == Suit.Diamonds) color = "Red"; else color = "Black"; enum Suit { Clubs, Hearts, Diamonds, Spades } Suit trumps = Suit.Hearts; if (trumps == Suit.Clubs) color = "Black"; else if (trumps == Suit.Hearts) color = "Red"; else if (trumps == Suit.Diamonds) color = "Red"; else color = "Black";
9
The switch Statement Use switch statements for multiple case blocks Use break statements to ensure that no fall through occurs switch (trumps) { case Suit.Clubs : case Suit.Spades : color = "Black"; break; case Suit.Hearts : case Suit.Diamonds : color = "Red"; break; default: color = "ERROR"; break; } switch (trumps) { case Suit.Clubs : case Suit.Spades : color = "Black"; break; case Suit.Hearts : case Suit.Diamonds : color = "Red"; break; default: color = "ERROR"; break; }
10
Quiz: Spot the Bugs if number % 2 == 0... if (percent 100)... if (minute == 60); minute = 0; if (minute == 60); minute = 0; switch (trumps) { case Suit.Clubs, Suit.Spades : color = "Black"; case Suit.Hearts, Suit.Diamonds : color = "Red"; defualt :... } switch (trumps) { case Suit.Clubs, Suit.Spades : color = "Black"; case Suit.Hearts, Suit.Diamonds : color = "Red"; defualt :... } 22 33 44 11
11
Using Iteration Statements The while Statement The do Statement The for Statement The foreach Statement Quiz: Spot the Bugs
12
The while Statement Execute embedded statements based on Boolean value Evaluate Boolean expression at beginning of loop Execute embedded statements while Boolean value Is True int i = 0; while (i < 10) { Console.WriteLine(i); i++; } int i = 0; while (i < 10) { Console.WriteLine(i); i++; } 0 1 2 3 4 5 6 7 8 9
13
The do Statement Execute embedded statements based on Boolean value Evaluate Boolean expression at end of loop Execute embedded statements while Boolean value Is True int i = 0; do { Console.WriteLine(i); i++; } while (i < 10); int i = 0; do { Console.WriteLine(i); i++; } while (i < 10); 0 1 2 3 4 5 6 7 8 9
14
The for Statement Place update information at the start of the loop Variables in a for block are scoped only within the block A for loop can iterate over several values for (int i = 0; i < 10; i++) { Console.WriteLine(i); } for (int i = 0; i < 10; i++) { Console.WriteLine(i); } 0 1 2 3 4 5 6 7 8 9 for (int i = 0; i < 10; i++) Console.WriteLine(i); Console.WriteLine(i); // Error: i is no longer in scope for (int i = 0; i < 10; i++) Console.WriteLine(i); Console.WriteLine(i); // Error: i is no longer in scope for (int i = 0, j = 0;... ; i++, j++)
15
The foreach Statement Choose the type and name of the iteration variable Execute embedded statements for each element of the collection class ArrayList numbers = new ArrayList( ); for (int i = 0; i < 10; i++ ) { numbers.Add(i); } foreach (int number in numbers) { Console.WriteLine(number); } ArrayList numbers = new ArrayList( ); for (int i = 0; i < 10; i++ ) { numbers.Add(i); } foreach (int number in numbers) { Console.WriteLine(number); } 0 1 2 3 4 5 6 7 8 9
16
Quiz: Spot the Bugs for (int i = 0, i < 10, i++) Console.WriteLine(i); for (int i = 0, i < 10, i++) Console.WriteLine(i); int i = 0; while (i < 10) Console.WriteLine(i); int i = 0; while (i < 10) Console.WriteLine(i); for (int i = 0; i >= 10; i++) Console.WriteLine(i); for (int i = 0; i >= 10; i++) Console.WriteLine(i); do... string line = Console.ReadLine( ); guess = int.Parse(line); while (guess != answer); do... string line = Console.ReadLine( ); guess = int.Parse(line); while (guess != answer); 22 33 44 11
17
Using Jump Statements The goto Statement The break and continue Statements
18
The goto Statement Flow of control transferred to a labeled statement Can easily result in obscure spaghetti code if (number % 2 == 0) goto Even; Console.WriteLine("odd"); goto End; Even: Console.WriteLine("even"); End:; if (number % 2 == 0) goto Even; Console.WriteLine("odd"); goto End; Even: Console.WriteLine("even"); End:;
19
The break and continue Statements The break statement jumps out of an iteration The continue statement jumps to the next iteration int i = 0; while (true) { Console.WriteLine(i); i++; if (i < 10) continue; else break; } int i = 0; while (true) { Console.WriteLine(i); i++; if (i < 10) continue; else break; }
20
Lab 4.1: Using Statements
21
Handling Basic Exceptions Why Use Exceptions? Exception Objects Using try and catch Blocks Multiple catch Blocks
22
Why Use Exceptions? Traditional procedural error handling is cumbersome int errorCode = 0; FileInfo source = new FileInfo("code.cs"); if (errorCode == -1) goto Failed; int length = (int)source.Length; if (errorCode == -2) goto Failed; char[] contents = new char[length]; if (errorCode == -3) goto Failed; // Succeeded... Failed:... int errorCode = 0; FileInfo source = new FileInfo("code.cs"); if (errorCode == -1) goto Failed; int length = (int)source.Length; if (errorCode == -2) goto Failed; char[] contents = new char[length]; if (errorCode == -3) goto Failed; // Succeeded... Failed:... Error handling Core program logic
23
Exception Objects Exception SystemException OutOfMemoryException IOException NullReferenceException ApplicationException
24
Using try and catch Blocks Object-oriented solution to error handling Put the normal code in a try block Handle the exceptions in a separate catch block try { Console.WriteLine("Enter a number"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException caught) { Console.WriteLine(caught); } try { Console.WriteLine("Enter a number"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException caught) { Console.WriteLine(caught); } Error handling Program logic
25
Multiple catch Blocks Each catch block catches one class of exception A try block can have one general catch block A try block is not allowed to catch a class that is derived from a class caught in an earlier catch block try { Console.WriteLine("Enter first number"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Enter second number"); int j = int.Parse(Console.ReadLine()); int k = i / j; } catch (OverflowException caught) {…} catch (DivideByZeroException caught) {…} try { Console.WriteLine("Enter first number"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Enter second number"); int j = int.Parse(Console.ReadLine()); int k = i / j; } catch (OverflowException caught) {…} catch (DivideByZeroException caught) {…}
26
Raising Exceptions The throw Statement The finally Clause Checking for Arithmetic Overflow Guidelines for Handling Exceptions
27
The throw Statement Throw an appropriate exception Give the exception a meaningful message throw expression ; if (minute = 60) { throw new InvalidTimeException(minute + " is not a valid minute"); // !! Not reached !! } if (minute = 60) { throw new InvalidTimeException(minute + " is not a valid minute"); // !! Not reached !! }
28
The finally Clause All of the statements in a finally block are always executed Monitor.Enter(x); try {... } finally { Monitor.Exit(x); } Monitor.Enter(x); try {... } finally { Monitor.Exit(x); } Any catch blocks are optional
29
Checking for Arithmetic Overflow By default, arithmetic overflow is not checked A checked statement turns overflow checking on checked { int number = int.MaxValue; Console.WriteLine(++number); } checked { int number = int.MaxValue; Console.WriteLine(++number); } unchecked { int number = int.MaxValue; Console.WriteLine(++number); } unchecked { int number = int.MaxValue; Console.WriteLine(++number); } -2147483648 OverflowException Exception object is thrown. WriteLine is not executed. MaxValue + 1 is negative?
30
Guidelines for Handling Exceptions Throwing Avoid exceptions for normal or expected cases Never create and throw objects of class Exception Include a description string in an Exception object Throw objects of the most specific class possible Catching Arrange catch blocks from specific to general Do not let exceptions drop off Main
31
Lab 4.2: Using Exceptions
32
Review Introduction to Statements Using Selection Statements Using Iteration Statements Using Jump Statements Handling Basic Exceptions Raising Exceptions
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.