jozef goetz, 2011 1 2011 pearson education, inc. all rights reserved. 2002 prentice hall. all...

107
Jozef Goetz, 2011 1 1 Pearson Education, Inc. All rights reserved. 2002 Prentice Hall. All rights reserved.

Upload: alexander-roberts

Post on 04-Jan-2016

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

1

2011 Pearson Education, Inc. All rights reserved.

2002 Prentice Hall. All rights reserved.

Page 2: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

2

Chapter 7 - MethodsOutline

7.1   Introduction7.2   Packaging Code in C#7.3   static Methods, static Variables and Class Math7.4   Declaring Methods with Multiple Parameters7.5   Notes on Declaring and Using Methods7.6   Method Call Stack and Activation Records7.7 Argument Promotion and Casting7.8 The Framework Class Library7.9   Case Study: Random-Number Generation

7.9.1 Scaling and Shifting Random Numbers7.9.2 Random-Number Repeatability for Testing and

Debugging7.10   Case Study: A Game of Chance (Introducing Enumerations)7.11   Scope of Declarations7.10   Case Study: A Game of Chance (Introducing Enumerations)7.11   Scope of Declarations7.12   Method Overloading7.15   Recursion7.16   Passing Arguments: Pass-by-Value vs. Pass-by-Reference

Page 3: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

3

E pluribus unum.(One composed of many.) Virgil

Form ever follows function. Louis Henri Sullivan

O! call back yesterday, bid time return. William Shakespeare

Call me Ishmael. Herman Melville

Page 4: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

4

Answer me in one word. William Shakespeare

When you call me that, smile! Owen Wister

There is a point at which methods devour themselves. Frantz Fanon

Life can only be understood backwards; but it must be lived forwards. Soren Kierkegaard

Page 5: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

5Chapter 7: Methods Objectives To construct programs modularly from small pieces called

methods. To introduce the common math methods available in the Framework

Class Library. To be able to create new methods. To understand the mechanisms for passing information between

methods. To introduce simulation techniques that use random number

generation. How to use random-number generation to implement game-playing

applications To understand how the visibility of identifiers is limited to specific

regions of programs. To understand how to write and use methods that call themselves –

recursive methods The differences between passing method arguments by value

and by reference

Page 6: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

67.1 Introduction

To develop and maintain a large program Divide and conquer technique

= Construct a program from small pieces (modules)

Modules in C# are called methods and classes

– Each piece more manageable than original program

– Facilitate design, implementation, operation and maintenance of large programs

Page 7: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

77.2 Program Modules in C# Modules in C#

Methods and classes allow you to modularize an application by separating its tasks into reusable units.

Programs written by combining new methods and classes with "prepackaged" ones Available in the .NET Framework Class Library (FCL) =>

msdn.microsoft.com/en-us/library/ms229335.aspx

When possible, reuse FCL classes and methods. FCL provides several modules

Rich collection of classes and methods Mathematical calculations, input/output files, string manipulations..

When possible, reuse Framework Class Library classes and methods.

Programmers can also create modules e.g., programmer-defined methods

Methods Invoked by a method call Returns a result to calling method (caller) - hiding of implementation details Similar to a boss (caller) asking a worker (called method) to complete a task

Page 8: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

8

Dividing an application into meaningful methods makes the application easier to debug and maintain

Software Engineering Observation 7.2•To promote software reusability, every method should be limited to performing a single, well-defined task, and the name of the method should express that task effectively.

Error-Prevention Tip 7.1A small method that performs one task is easier to test and debug than a larger method that performs many tasks.

Software Engineering Observation 7.3If your method might be attempting to perform too many diverse tasks. It is usually best to break such a method into several smaller methods.

7.2  Packaging Code in C# (Cont.)

Page 9: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Fig. 7.1 Hierarchical boss-method/worker-method relationship.

Note: The boss method – main doesn’t know how worker 1, worker 2 and worker 4 performs its designated work – hiding of implementation details.

worker 1 acts as a “boss method” to worker 4 and worker 5.

main

worker1 worker2 worker3

worker4 worker5

Dividing an application into meaningful methods makes the application easier to debug and maintain

Page 10: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

10

The code that calls a method is known as the client code. An analogy to the method-call-and-return structure is the

hierarchical form of management (Figure 7.1). The boss method does not know how the worker method performs

its designated tasks. The worker may also call other worker methods.

This “hiding” of implementation details promotes good software engineering.

Fig. 7.1 | Hierarchical boss-method/worker-method relationship. (Part 1 of 2.)

7.2  Packaging Code in C# (Cont.)

Page 11: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

117.3 Math Class Methods Static methods are available when no object of the class have been

created To declare a method as static, place the keyword static before the

return type in the method’s declaration. The Math class – located in namespace System

Allows the user to perform common math calculations Using methods

ClassName.MethodName( argument1, arument2, … ) List of methods are in Fig. 7.2

Console.WriteLine( Math.Sqrt( 900.0 ) ); Math.sqrt takes an argument of type double returns the square root of its

argument– Statement would print 30.0

All Math methods return data type double– Must be invoked using Math and dot operator (.)

Page 12: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

127.3 Math Class MethodsMethod Description Example Abs( x ) absolute value of x Abs( 23.7 ) is 23.7

Abs( 0 ) is 0 Abs( -23.7 ) is 23.7

Ceiling( x ) rounds x to the smallest integer not less than x

Ceiling( 9.2 ) is 10.0 Ceiling( -9.8 ) is -9.0

Cos( x ) trigonometric cosine of x (x in radians)

Cos( 0.0 ) is 1.0

Exp( x ) exponential method ex Exp( 1.0 ) is approximately 2.7182818284590451 Exp( 2.0 ) is approximately 7.3890560989306504

Floor( x ) rounds x to the largest integer not greater than x

Floor( 9.2 ) is 9.0 Floor( -9.8 ) is -10.0

Log( x ) natural logarithm of x (base e) Log( 2.7182818284590451 ) is approximately 1.0 Log( 7.3890560989306504 ) is approximately 2.0

Max( x, y ) larger value of x and y (also has versions for float, int and long values)

Max( 2.3, 12.7 ) is 12.7 Max( -2.3, -12.7 ) is -2.3

Min( x, y ) smaller value of x and y (also has versions for float, int and long values)

Min( 2.3, 12.7 ) is 2.3 Min( -2.3, -12.7 ) is -12.7

Pow( x, y ) x raised to power y (xy) Pow( 2.0, 7.0 ) is 128.0 Pow( 9.0, .5 ) is 3.0

Sin( x ) trigonometric sine of x (x in radians)

Sin( 0.0 ) is 0.0

Sqrt( x ) square root of x Sqrt( 900.0 ) is 30.0 Sqrt( 9.0 ) is 3.0

Tan( x ) trigonometric tangent of x (x in radians)

Tan( 0.0 ) is 0.0

Fig. 7.2 Commonly used Math class methods.

Math defines 2 Constants which are static but you don’t need to specify “static”:

Math.PI = 3.1415927535…Math.E = 2.7182818285…

Method arguments may be constants, variables or expressions.

Page 13: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

13

When objects of a class containing static variables are created, all the objects of that class share one copy of the class’s static variables.

Together the static variables and

instance variables

represent the fields of a class.

7.3  static Methods, static Variables and Class Math (Cont.)

Page 14: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

14

Why Is Method Main Declared static? The Main method is sometimes called the application’s entry

point.

Declaring Main as static allows the execution environment to invoke Main without creating an instance of the class.

When you execute your application from the command line, you type the application name, followed by command-line arguments that specify a list of strings separated by spaces.

The execution environment will pass these arguments to the Main method of your application.

7.3  static Methods, static Variables and Class Math (Cont.)

Page 15: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

15

Additional Comments about Method Main Applications that do not take command-line arguments

may omit the string[] args parameter.

The public keyword may be omitted.

You can declare Main with return type int (instead of void) to enable Main to return an error code with the return statement.

You can declare only one Main method in each class.

7.3  static Methods, static Variables and Class Math (Cont.)

Page 16: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

16

You can place a Main method in every class you declare.

However, you need to indicate the application’s entry point.

Do this by clicking the menu Project > [ProjectName] Properties... and selecting the class containing the Main method that should be the entry point from the Startup object list box.

7.3  static Methods, static Variables and Class Math (Cont.)

Page 17: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

17

C# doesn’t allow a static method to access non-static members of the same class directly.

A static method can call only other static methods of the same class directly and can manipulate only static variables in the same class directly.

7.4  Declaring and Using Methods

Page 18: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

187.4 Methods Modularize a program by packing code as a

method Variables declared inside methods are local

variables Known only in method defined

Parameters Communicate information between methods Are local variables

Benefits (motivation for modularizing a program with methods)

Divide and conquer makes Manageable program development

Software reusability Existing standardized methods are building blocks for new programs Abstraction - hide internal details (library methods)

Avoids code repetition – methods can be called from several locations

Page 19: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

19Method Definitions Method definition format:

return-value-type method-name( parameter-list )//method header { declarations and statements // method body

– Redeclaring a method parameter as a local variable in the method’s body is a compilation error.

}

Method-name: any valid identifier

Return-value-type: data type of the result Can return at most one value Omitting the return type in a method declaration is a syntax error.

void - method returns nothing

Parameter-list: comma separated list, declares parameters

Page 20: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

20Common Programming Error 7.8

Forgetting to return a value from a method that should return a value is a compilation error.

If a return type other than void is specified, the method must contain a return statement that returns a value consistent with the method’s return type.

Returning a value from a method whose return type has been declared void is a compilation error.

Page 21: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

21Method Definitions

For each parameter in the method definition: there must be parameter list compatible with the

ton type order and number,

of the corresponding argument in the method call

Page 22: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

22 Method Definitions

Writing a custom method Body

Contains the code of what the method does Contains the return value if necessary

All methods must be defined inside of a class Method cannot be defined inside another method

3 way to return control: program flow reaches 1. } - Reaching the function-ending right brace 2. return ; 3. return expression; // returns the resulting value to the caller

Each method should be limited to performing a single, well defined task, no longer that one page The name of the method (self-explanatory) should express that

task effectively.

Page 23: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

23Software Engineering Observation 7.4

A method that has many parameters may be performing too many tasks.

Consider dividing the method into smaller methods that perform the separate tasks.

As a guideline, try to fit the method header on one line if possible.

Page 24: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

24 Method Definitions

Until now, our programs have used methods of class Console to obtain: User input from the command line Output either to the command prompt or in messageBox Minuses: the command prompt can obtain only 1 value (or

series of the same data type) at a time from the user, and a msg dialog can display only 1 msg

GUI application can read multiple inputs simultaneously and display/output many pieces of data at once – see next program

Page 25: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline25

Subtract.cs

1 // Fig. 6.3 ed1: SquareInt.cs - The windows application 2 // A programmer-defined Square method.3 // calculates of the integers from 1 to 10 4 using System; // includes basic data types5 using System.Drawing; // for graphics capabilities6 using System.Collections; // for complex data structures7 using System.ComponentModel; // controls component behavior8 using System.Windows.Forms; // for GUI development9 using System.Data; // for reading outside data10 11 // form used to display results of squaring 10 numbers12 public class SquareIntegers : System.Windows.Forms.Form13 {14 private System.ComponentModel.Container components = null;15

16 // label containing results17 private System.Windows.Forms.Label outputLabel;18 19 public SquareIntegers()20 {21 // Required for Windows Form Designer support22 InitializeComponent(); // to create objects23 24 int result; // store result of call to method Square25

Start of class SquareInteger. It implements System.Windows.Forms.Form

Start of the SquareIntegers method

This is the method’s variables. They can only be used within the method.

Page 26: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline26

Subtract.cs

26 // loop 10 times27 for ( int counter = 1; counter <= 10; counter++ )28 {29 // calculate square of counter and store in result30 result = Square( counter );31 32 // append result to output string33 outputLabel.Text += "The square of " + counter + 34 " is " + result + "\n";35 }36 37 } // end SquareIntegers38 39 // Clean up any resources being used.40 protected override void Dispose( bool disposing )41 {42 // Visual Studio .NET-generated code for method Dispose43 }44 45 // Required method for Designer support46 private void InitializeComponent()47 {48 // Visual Studio .NET generated code49 // for method InitializeComponent50 }51

The main body of the SquareIntegers method

A call to the Square method. The counter variable is passed to it for use. The return value is stored in result

Page 27: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline27

Subtract.cs

Program Output

52 // The main entry point for the application.53 [STAThread]54 static void Main() // no arguments55 {56 Application.Run( new SquareIntegers() );57 }58 59 // Square method definition60 int Square( int y )61 {62 return y * y; // return square of y63 64 } // end method Square65 66 } // end of class SquareIntegers

The Square method. Receives one integer and returns an integer

The method returns the passed variable multiplied by itself

Page 28: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

28Method Definitions (cont.)

When method call encountered Control is transferred from point of invocation to method

Returning control If nothing returned: return;

– Or until reaches right brace

If value returned: return expression;– Returns the value of expression

Example user-defined method:public int Square( int y )

{return y * y}

Page 29: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

29

1 // Fig. 7.3: MaximumFinder.cs Console application.

2 // User-defined method Maximum. Ch. 7.4 Declaring Methods with Multiple Parameters

3 using System;

4

5 public class MaximumFinder

6 {

7 // obtain three floating-point values and determine maximum value

8 public void DetermineMaximum()

9 {

10 // prompt for and input three floating-point values

11 Console.WriteLine( "Enter three floating-point values,\n"

12 + " pressing 'Enter' after each one: " );

13 double number1 = Convert.ToDouble( Console.ReadLine() );

14 double number2 = Convert.ToDouble( Console.ReadLine() );

15 double number3 = Convert.ToDouble( Console.ReadLine() );

16

17 // determine the maximum value

18 double result = Maximum( number1, number2, number3 );

19

20 // display maximum value

21 Console.WriteLine( "Maximum is: " + result );

22 } // end method DetermineMaximum

Outline

MaximumFinder.cs

23

24 // returns the maximum of its three double parameters

25 public double Maximum( double x, double y, double z )

26 {

27 double maximumValue = x; // assume x is the largest to start

28

29 // determine whether y is greater than maximumValue

30 if ( y > maximumValue )

31 maximumValue = y;

32

33 // determine whether z is greater than maximumValue

34 if ( z > maximumValue )

35 maximumValue = z;

36

37 return maximumValue;

38 } // end method Maximum

39 } // end class MaximumFinder

Enter three floating-point values, pressing 'Enter' after each one: 3.332.221.11Maximum is: 3.33

Page 30: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

30 1 // Fig. 7.4: MaximumFinderTest.cs

2 // Application to test class MaximumFinder.

3 public class MaximumFinderTest

4 {

5 // application starting point

6 public static void Main( string[] args )

7 {

8 MaximumFinder maximumFinder = new MaximumFinder();

9 maximumFinder.DetermineMaximum();

10 } // end Main

11 } // end class MaximumFinderTest Enter three floating-point values, pressing 'Enter' after each one: 3.33 2.22 1.11 Maximum is: 3.33 Enter three floating-point values, pressing 'Enter' after each one: 2.22 3.33 1.11 Maximum is: 3.33 Enter three floating-point values, pressing 'Enter' after each one: 1.11 2.22 867.5309 Maximum is: 867.5309

Outline

MaximumFinderTest.cs

Page 31: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline31

MaximumValue.cs

1 // Fig. 7.3 ed1: MaximumValue.cs2 // Finding the maximum of three doubles using the FCL library4 using System; // in a single class5 6 class MaximumValue7 {8 // main entry point for application9 static void Main( string[] args )10 {11 // obtain user input and convert to double12 Console.Write( "Enter first floating-point value: " );13 double number1 = Double.Parse( Console.ReadLine() );14 // or use Convert.ToDouble ( Console.ReadLine() );15 Console.Write( "Enter second floating-point value: " );16 double number2 = Double.Parse( Console.ReadLine() );17 18 Console.Write( "Enter third floating-point value: " );19 double number3 = Double.Parse( Console.ReadLine() );20 21 // call method Maximum to determine largest value22 double max = Maximum( number1, number2, number3 );23 24 // display maximum value25 Console.WriteLine("\nmaximum is: " + max );26 27 } // end method Main

The program gets three values from the user

The three values are then passed to the Maximum method for use

Enter first floating-point value: 37.3Enter second floating-point value: 99.32Enter third floating-point value: 27.1928 maximum is: 99.32

Page 32: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline32

MaximumValue.cs

Program Output

28 29 // Maximum method uses method Math.Max to help determine30 // the maximum value31 static double Maximum( double x, double y, double z )32 {33 return Math.Max( x, Math.Max( y, z ) );34 35 } // end method Maximum36 37 } // end class MaximumValue

Enter first floating-point value: 37.3Enter second floating-point value: 99.32Enter third floating-point value: 27.1928 maximum is: 99.32

The Maximum method receives 3 variables and returns the largest one

The use of Math.Max uses the Max method in class Math. The dot operator is used to call it.

Exc: Convert the console app. into the window application.

Page 33: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

33Common Programming Error 7.1

Declaring method parameters of the same type as

float x, y instead of float x, float y

is a syntax error —a type is required for each parameter in the parameter list.

Page 34: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

347.7 Argument Promotion Implicit Conversion or Coercion of arguments

Object is converted to a needed type implicitly Only done if complier knows no data will be lost Forcing arguments to appropriate type to pass to method

e.g., Console.WriteLine( Math.Sqrt( 4 ) );

– Evaluates Math.Sqrt( 4 ) and displays 2

– So it converts 4 to the double (which is required for the Sqrt arguments) value 4.0 before passing the value to Math.Sqrt without changing the value

C# does not allow narrowing without explicit cast operation

Explicit Conversion Object is manually converted Required if there could be a loss of data Widening conversion

Make an object that of a derived class more complex without losing data Narrowing conversion

Make an object that of a base class and cause some data loss– If y = 4.5 the method call – square( (int) y ) – explicitly casts (converts) the value of y to an integer, so it returns 16, not 20.25

Page 35: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

357.7 Argument Promotion

Promotion rules Specify how to convert types without data loss

Apply to

a mixed-type expression

primitive data-type values passed as arguments to methods

The type of each value in a mixed-type expression is

promoted to the “highest” type in the expression (actually, the expression uses a temporary copy of each value; the original values remain unchanged)

Page 36: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

367.7 Argument Promotion p.238, 935

Type size [byte] Can be Converted to Type(s) decimal 16 No possible implicit conversion to other simple types

double 8 No possible implicit conversion to other simple types

float 4 double

long 8 decimal, double, float

ulong 8 decimal, double, float

int 4 decimal, double, float, long

uint 4 decimal, double, float, long, ulong

short 2 decimal, double, float, int, long

ushort 2 decimal, double, float, int, uint, long, ulong

Bool 1 No possible implicit conversion to other simple types

Byte 1 decimal, double, float, int, uint, long, ulong, short or ushort

sbyte 1 decimal, double, float, int, long or short

char 1 decimal, double, float, int, uint, long, ulong, or ushort

Fig. 7.4 Allowed implicit conversions.

Page 37: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

37Value Types and Reference Types

Value types – they are portable across platform Contains data of the specified type: The buil-in values types: int, bool see previous slides

integral types: sbyte, byte, short, int, long etc. floating types: float and double decimal bool

Programmer created structs enumerations (Chapter 7)

Reference types Refererence to objects

Contain an address to a spot in memory where the data is Build-in reference types: string and object Programmer created

Classes (Chapter 10) Interfaces (Chapter 12) Delegates (Chapter 12)

All values are 32bit allowing cross-platform use

Page 38: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

387.8 C# Namespaces vs FCL

Namespace (used packages in Java) A group of classes and their methods

FCL (Framework Class Library) is composed of namespaces

Namespaces are stored in .dll files called assemblies Must add a reference to the appropriate assembly

– assembly reference namespace System are added automatically

A list of the FLC namespaces are in Fig. 7.5

Familiarize yourself with the classes and methods provided by the FCL msdn2.microsoft.com/en-us/library/ms229335.

.NET Framework, class library for info on all namespaces

Included in a program with the using keyword (import in Java)

Page 39: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

397.8 C# Namespaces

Page 40: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

407.8 C# Namespaces

Page 41: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

417.8 C# Namespaces

Page 42: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

42

.NET Framework Namespaces & Classes

Page 43: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

43

.NET Framework

Page 44: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

447.9 Random Number Generation

Class Random Within namespace System Truly random

The numbers are generated using an equations with a seed

– The seed is usually the exact time of day

randomObject.Next() Returns a number from 0 to Int32.MaxValue

– Int32.MaxValue = 2,147,483,647

randomObject.Next( x ) Returns a value from 0 up to but not including x

randomObject.Next( x, y ) Returns a number between x and up to but not including y

Page 45: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline45

RandomInt.cs

1 // Fig. 7.6 ed4: RandomInt.cs2 // Random integers.3 4 using System;5 using System.Windows.Forms;6 7 // calculates and displays 20 random integers8 class RandomInt9 {10 // main entry point for application11 static void Main( string[] args )12 {13 int value;14 string output = "";15 16 Random randomInteger = new Random(); // located in System17 18 // loop 20 times19 for ( int i = 1; i <= 20; i++ ) 20 {21 // pick random integer between 1 and 622 value = randomInteger.Next( 1, 7 );23 output += value + " "; // append value to output24 25 // if counter divisible by 5, append newline26 if ( i % 5 == 0 )27 output += "\n";28 29 } // end for structure30

Creates a new Random object

Will set value to a random number from1 up to but not including 7

Format the output to only have 5 numbers per line

Page 46: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline46

RandomInt.cs

Program Output

31 MessageBox.Show( output, "20 Random Numbers from 1 to 6",32 MessageBoxButtons.OK, MessageBoxIcon.Information );33 34 } // end Main35 36 } // end class RandomInt

Display the output in a message box

Page 47: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline47

RollDie.cs

1 // Fig. 6.10ed1 or 7.7ed3: RollDie.cs //show it2 // Rolling 4 dice at a time and displays an image of 3 // each die in the window.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 using System.IO; // enables reading data from files11 12 // form simulates the rolling of 12 dice,13 // and displays them14 public class RollDie : System.Windows.Forms.Form15 {16 private System.ComponentModel.Container components = null;17 18 private System.Windows.Forms.Button rollButton;19 20 private System.Windows.Forms.Label dieLabel2;21 private System.Windows.Forms.Label dieLabel1;22 private System.Windows.Forms.Label dieLabel3;23 private System.Windows.Forms.Label dieLabel4;24 25 private Random randomNumber = new Random();26 27 public RollDie()28 {29 InitializeComponent();30 }31 32 // Visual Studio .NET-generated code33

Page 48: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline48

RollDie.cs

34 // method called when rollButton clicked,35 // passes labels to another method36 protected void rollButton_Click( 37 object sender, System.EventArgs e )38 {39 // pass the labels to a method that will40 // randomly assign a face to each die41 DisplayDie( dieLabel1 );42 DisplayDie( dieLabel2 );43 DisplayDie( dieLabel3 );44 DisplayDie( dieLabel4 );45 46 } // end rollButton_Click47 48 // determines image to be displayed by current die49 public void DisplayDie( Label dieLabel )50 {51 int face = 1 + randomNumber.Next( 6 );52 53 // displays image specified by filename54 dieLabel.Image = Image.FromFile( 55 Directory.GetCurrentDirectory() + 56 "\\images\\die" + face +".gif" );57 }58 59 // main entry point for application60 [STAThread]61 static void Main() 62 {63 Application.Run( new RollDie() );64 }65 66 } // end class RollDie

Pass the labels to be assigned data

Will return a random integer from 1 up to 6

Page 49: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline49

RollDie.cs Program Output

Page 50: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 51: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 52: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 53: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline53

RollDie2.cs

1 // Fig. 6.11 ed1 : RollDie2.cs2 // Rolling 12 dice with frequency chart.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 using System.IO;11 12 // displays the different dice and frequency information13 public class RollDie2 : System.Windows.Forms.Form14 {15 private System.ComponentModel.Container components = null;16 17 private System.Windows.Forms.Button rollButton;18 19 private System.Windows.Forms.RichTextBox displayTextBox;20 21 private System.Windows.Forms.Label dieLabel1;22 private System.Windows.Forms.Label dieLabel2;23 private System.Windows.Forms.Label dieLabel3;24 private System.Windows.Forms.Label dieLabel4;25 private System.Windows.Forms.Label dieLabel5;26 private System.Windows.Forms.Label dieLabel6;27 private System.Windows.Forms.Label dieLabel7;28 private System.Windows.Forms.Label dieLabel8;29 private System.Windows.Forms.Label dieLabel9;30 private System.Windows.Forms.Label dieLabel10;31 private System.Windows.Forms.Label dieLabel11;32 private System.Windows.Forms.Label dieLabel12;33 34 private Random randomNumber = new Random();

Page 54: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline54

RollDie2.cs

35 36 private int ones, twos, threes, fours, fives, sixes;37 38 public RollDie2()39 {40 InitializeComponent();41 ones = twos = threes = fours = fives = sixes = 0; 42 }43 44 // Visual Studio .NET-generated code45 46 // simulates roll by calling DisplayDie for47 // each label and displaying the results48 protected void rollButton_Click( 49 object sender, System.EventArgs e )50 {51 // pass 12 labels to a method that will52 // randomly assign a face to each die53 DisplayDie( dieLabel1 );54 DisplayDie( dieLabel2 );55 DisplayDie( dieLabel3 );56 DisplayDie( dieLabel4 );57 DisplayDie( dieLabel5 );58 DisplayDie( dieLabel6 );59 DisplayDie( dieLabel7 );60 DisplayDie( dieLabel8 );61 DisplayDie( dieLabel9 );62 DisplayDie( dieLabel10 );63 DisplayDie( dieLabel11 );64 DisplayDie( dieLabel12 );65 66 double total = ones + twos + threes + fours + fives + sixes; 67

Sets all of the variables to 0

Pass the label to be assigned a random number

Page 55: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline55

RollDie2.cs

68 // display the current frequency values69 displayTextBox.Text = "Face\t\tFrequency\tPercent\n1\t\t" + 70 ones + "\t\t" +71 String.Format( "{0:F2}", ones / total * 100 ) +72 "%\n2\t\t" + twos + "\t\t" + 73 String.Format( "{0:F2}", twos / total * 100 ) + 74 "%\n3\t\t" + threes + "\t\t" + 75 String.Format( "{0:F2}", threes / total * 100 ) + 76 "%\n4\t\t" + fours + "\t\t" + 77 String.Format( "{0:F2}", fours / total * 100 ) +78 "%\n5\t\t" + fives + "\t\t" + 79 String.Format( "{0:F2}", fives / total * 100 ) +80 "%\n6\t\t" + sixes + "\t\t" + 81 String.Format( "{0:F2}", sixes / total * 100 ) + "%";82 83 } // end rollButton_Click84 85 // display the current die, and modify frequency values86 public void DisplayDie( Label dieLabel )87 {88 int face = 1 + randomNumber.Next( 6 );89 90 dieLabel.Image = Image.FromFile( 91 Directory.GetCurrentDirectory() + 92 "\\images\\die" + face + ".gif" );93

Assign a random face to the label based on the number generated

Displays to the user the amount of times each dice number has shown up

Page 56: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline56

RollDie2.cs

94 // add one to frequency of current face95 switch ( face )96 {97 case 1: ones++;98 break;99 100 case 2: twos++;101 break;102 103 case 3: threes++;104 break;105 106 case 4: fours++;107 break;108 109 case 5: fives++;110 break;111 112 case 6: sixes++;113 break;114 115 } // end switch116 117 } // end DisplayDie118 119 // The main entry point for the application.120 [STAThread]121 static void Main() 122 {123 Application.Run( new RollDie2() );124 } 125 126 } // end of class RollDie2

A switch statement is used to keep track of number of each die rolled

Page 57: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline57

RollDie2.cs Program Output

Page 58: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

587.10 Example: Game of Chance

Craps simulation - the most popular games of chance A player has 2 dice. Each dice has six faces. The player must roll two dice on the first and all subsequent rolls

1. Roll dice first time If sum equals 7 or 11, the player wins on the first throw (called “craps”) If sum equals 2, 3 or 12, the player loses Any other sum (4, 5, 6, 8, 9, 10) is that player’s point

2. Keep rolling dice until… Sum matches player’s point

– Player wins Sum equals 7

– Player loses GUI controls

A GroupBox Holds other controls Manages/organizes them

A PictureBox Used to display a picture on the form

Page 59: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline59

CrapsGame.cs

1 // Fig. 6.12 ed1: CrapsGame.cs2 // Craps Game3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 using System.IO;11 12 public class CrapsGame : System.Windows.Forms.Form13 {14 private System.ComponentModel.Container components = null;15 25 private System.Windows.Forms.PictureBox imgPointDie1; //upper one16 private System.Windows.Forms.PictureBox imgPointDie2; //upper one17 private System.Windows.Forms.PictureBox imgDie2; //lower one18 private System.Windows.Forms.PictureBox imgDie1; //lower one19 20 private System.Windows.Forms.Label lblStatus;21 22 private System.Windows.Forms.Button rollButton;23 private System.Windows.Forms.Button playButton;24 26 27 private System.Windows.Forms.GroupBox fraPoint;28 29 // declare other variables30 int myPoint;31 int myDie1;32 int myDie2;33

imgDie1

imgPointDie1

Page 60: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline60

CrapsGame.cs

34 public enum DiceNames35 {36 SNAKE_EYES = 2,37 TREY = 3,38 CRAPS = 7,39 YO_LEVEN = 11,40 BOX_CARS = 12,41 }42 43 public CrapsGame()44 {45 InitializeComponent();46 }47 48 // Visual Studio .NET-generated code49 50 // simulate next roll and result of that roll51 protected void rollButton_Click( 52 object sender, System.EventArgs e )53 {54 int sum;55 sum = rollDice(); //at least executed56 57 if ( sum == myPoint ) // Sum matches player’s point58 {59 lblStatus.Text = "You Win!!!";60 rollButton.Enabled = false;61 playButton.Enabled = true;62 }

Creates an enumeration of the constant values in craps

When the second rolled sum equals the first rolled sum the player wins

Page 61: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline61

CrapsGame.cs

63 else64 if ( sum == ( int )DiceNames.CRAPS ) // = 765 {66 lblStatus.Text = "Sorry. You lose.";67 rollButton.Enabled = false;68 playButton.Enabled = true;69 }70 71 } // end rollButton_Click72 73 // simulate first roll and result of that roll74 protected void playButton_Click( 75 object sender, System.EventArgs e )76 {77 int sum;78 myPoint = 0;79 fraPoint.Text = "Point";80 lblStatus.Text = "";81 imgPointDie1.Image = null; //upper one82 imgPointDie2.Image = null; //upper one83 84 sum = rollDice();85

If the second roll equals CRAPS (7), then the player loses

Page 62: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline62

CrapsGame.cs

86 switch ( sum )87 {88 case ( int )DiceNames.CRAPS: // = 789 case ( int )DiceNames.YO_LEVEN: 90 rollButton.Enabled = false; // disable Roll button91 lblStatus.Text = "You Win!!!";92 break;93 case ( int )DiceNames.SNAKE_EYES: // = 294 case ( int )DiceNames.TREY: // = 395 case ( int )DiceNames.BOX_CARS: // = 1296 rollButton.Enabled = false; 97 lblStatus.Text = "Sorry. You lose.";98 break;99 default:100 myPoint = sum;101 fraPoint.Text = "Point is " + sum;102 lblStatus.Text = "Roll Again";103 displayDie( imgPointDie1, myDie1 );//upper one104 displayDie( imgPointDie2, myDie2 );//upper one105 playButton.Enabled = false;106 rollButton.Enabled = true;107 break;108 109 } // end switch110 111 } // end playButton_Click112 113 private void displayDie( PictureBox imgDie, int face )114 {115 imgDie.Image = Image.FromFile( 116 Directory.GetCurrentDirectory() + 117 "\\images\\die" + face + ".gif" );118 }119

If on the first roll the players gets a 7 or an 11 they win

If the first roll is a 2, 3 or 12, the player loses.

Any other number allows the player to roll again

imgPointDie1

imgDie1

Page 63: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline63

CrapsGame.cs

120 // simulates the rolling of two dice121 private int rollDice()122 {123 int die1, die2, dieSum;124 Random randomNumber = new Random();125 126 die1 = randomNumber.Next( 1, 7 );127 die2 = randomNumber.Next( 1, 7 );128 129 displayDie( imgDie1, die1 ); //lower one130 displayDie( imgDie2, die2 ); //lower one131 132 myDie1 = die1;133 myDie2 = die2;134 dieSum = die1 + die2;135 return dieSum;136 137 } // end rollDice138 139 // main entry point for application140 [STAThread]141 static void Main() 142 {143 Application.Run(new CrapsGame());144 }145 146 } // end of class CrapsGame

Generates two random numbers, one for each die

imgDie1

imgPointDie1

Page 64: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline64

CrapsGame.cs Program Output

Page 65: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

65 1 // Fig. 7.10 ed3 or 7.8 ed4: CrapsTest.cs

2 // Application to test class Craps. – see next slides

3 public class CrapsTest

4 {

5 public static void Main( string[] args )

6 {

7 Craps game = new Craps();

8 game.Play(); // play one game of craps

9 } // end Main

10 } // end class CrapsTest Player rolled 2 + 5 = 7 Player wins Player rolled 2 + 1 = 3 Player loses

Outline

CrapsTest.cs

Player rolled 4 + 6 = 10 Point is 10 Player rolled 1 + 3 = 4 Player rolled 1 + 3 = 4 Player rolled 2 + 3 = 5 Player rolled 4 + 4 = 8 Player rolled 6 + 6 = 12 Player rolled 4 + 4 = 8 Player rolled 4 + 5 = 9 Player rolled 2 + 6 = 8 Player rolled 6 + 6 = 12 Player rolled 6 + 4 = 10 Player wins Player rolled 2 + 4 = 6 Point is 6 Player rolled 3 + 1 = 4 Player rolled 5 + 5 = 10 Player rolled 6 + 1 = 7 Player loses

Page 66: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

66 1 // Fig. 7.10 ed3 (or 7.8 ed4): Craps.cs Console application solution

2 // Craps class simulates the dice game craps.

3 using System;

4

5 public class Craps

6 {

7 // create random number generator for use in method RollDice

8 private Random randomNumbers = new Random();

9

10 // enumeration with constants that represent the game status

11 private enum Status { CONTINUE, WON, LOST }

12

13 // enumeration with constants that represent common rolls of the dice

14 private enum DiceNames

15 {

16 SNAKE_EYES = 2,

17 TREY = 3,

18 SEVEN = 7,

19 YO_LEVEN = 11,

20 BOX_CARS = 12

21 }

Outline

Craps.cs

(1 of 4)

Page 67: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

6722

23 // plays one game of craps

24 public void Play()

25 {

26 // gameStatus can contain CONTINUE, WON or LOST

27 Status gameStatus = Status.CONTINUE;

28 int myPoint = 0; // point if no win or loss on first roll

29

30 int sumOfDice = RollDice(); // first roll of the dice

31

32 // determine game status and point based on first roll

33 switch ( ( DiceNames ) sumOfDice )

34 {

35 case DiceNames.SEVEN: // win with 7 on first roll

36 case DiceNames.YO_LEVEN: // win with 11 on first roll

37 gameStatus = Status.WON;

38 break;

39 case DiceNames.SNAKE_EYES: // lose with 2 on first roll

40 case DiceNames.TREY: // lose with 3 on first roll

41 case DiceNames.BOX_CARS: // lose with 12 on first roll

42 gameStatus = Status.LOST;

43 break;

44 default: // did not win or lose, so remember point

45 gameStatus = Status.CONTINUE; // game is not over

46 myPoint = sumOfDice; // remember the point

47 Console.WriteLine( "Point is {0}", myPoint );

48 break;

49 } // end switch

Outline

Craps.cs

(2 of 4)

Player rolled 2 + 4 = 6Point is 6Player rolled 3 + 1 = 4Player rolled 5 + 5 = 10Player rolled 6 + 1 = 7Player loses

Page 68: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

6850

51 // roll part: while game is not complete – check status

52 while ( gameStatus == Status.CONTINUE ) // game not WON or LOST

53 {

54 sumOfDice = RollDice(); // roll dice again

55

56 // determine game status

57 if ( sumOfDice == myPoint ) // win by making point

58 gameStatus = Status.WON;

59 else

60 // lose by rolling 7 before point

61 if ( sumOfDice == ( int ) DiceNames.SEVEN )

62 gameStatus = Status.LOST;

63 } // end while

64

65 // display won or lost message

66 if ( gameStatus == Status.WON )

67 Console.WriteLine( "Player wins" );

68 else

69 Console.WriteLine( "Player loses" );

70 } // end method Play

Outline

Craps.cs

(3 of 4)

Player rolled 2 + 4 = 6Point is 6Player rolled 3 + 1 = 4Player rolled 5 + 5 = 10Player rolled 6 + 1 = 7Player loses

Player rolled 2 + 5 = 7Player wins

Player rolled 2 + 1 = 3Player loses

Page 69: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

6971

72 // roll dice, calculate sum and display results

73 public int RollDice()

74 {

75 // pick random die values

76 int die1 = randomNumbers.Next( 1, 7 ); // first die roll

77 int die2 = randomNumbers.Next( 1, 7 ); // second die roll

78

79 int sum = die1 + die2; // sum of die values

80

81 // display results of this roll

82 Console.WriteLine( "Player rolled {0} + {1} = {2}",

83 die1, die2, sum );

84 return sum; // return sum of dice

85 } // end method RollDice

86 } // end class Craps

Outline

Craps.cs

(4 of 4)

Player rolled 2 + 5 = 7Player wins

Player rolled 2 + 1 = 3Player loses

Page 70: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

70 1 // Fig. 7.10 ed3 (or 7.8 ed4): CrapsTest.cs

2 // Application to test class Craps.

3 public class CrapsTest

4 {

5 public static void Main( string[] args )

6 {

7 Craps game = new Craps();

8 game.Play(); // play one game of craps

9 } // end Main

10 } // end class CrapsTest Player rolled 2 + 5 = 7 Player wins Player rolled 2 + 1 = 3 Player loses

Outline

CrapsTest.cs

Player rolled 4 + 6 = 10 Point is 10 Player rolled 1 + 3 = 4 Player rolled 1 + 3 = 4 Player rolled 2 + 3 = 5 Player rolled 4 + 4 = 8 Player rolled 6 + 6 = 12 Player rolled 4 + 4 = 8 Player rolled 4 + 5 = 9 Player rolled 2 + 6 = 8 Player rolled 6 + 6 = 12 Player rolled 6 + 4 = 10 Player wins Player rolled 2 + 4 = 6 Point is 6 Player rolled 3 + 1 = 4 Player rolled 5 + 5 = 10 Player rolled 6 + 1 = 7 Player loses

Page 71: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

717.11 Scope of DeclarationsVariable and reference attributes:

1. name, 2. type, 3. size, 4. value, 5. scope, 6. duration

Scope Where identifier can be referenced/accessed Local variable can only be used in a block declared

Class scope Begins at opening brace, ends at closing brace of class Methods and instance variables

Can be accessed by any method in class Repeated names causes previous to be hidden until scope ends

Block scope Begins at identifier's declaration, ends at terminating brace Have local variables and parameters of methods

When nested blocks and an outer block have an identifier defined; they need unique identifier names otherwise a syntax error

If local variable has same name as instance variable Instance variable "hidden”

Page 72: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

727.11 Scope of Declarations; Duration of Identifiers

Variable and reference attributes: name, type, size, value, duration, scope Duration (lifetime)

the period during which an identifier exists in memory

Automatic duration variables Created when program control reaches their declaration - local variables in a method

or in blocks, They should be initialized before they can be used Exist in block they are declared When block becomes inactive, they are destroyed

Static duration variables Created when defined and loaded into memory for execution Their storage is allocated and initialized when their classes are loaded into

memory Exist until program ends

Local variables Created when declared Destroyed when the block exits

Instance variables are initialized by the compiler: Most variables are set to 0 All bool variables are set to false All reference variables are set to null

Page 73: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline73

Scoping.cs

1 // Fig. 6.13 ed1 or 7.11 ed3: 7.9 ed4 Scoping.cs2 // A Scoping example.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class Scoping : System.Windows.Forms.Form12 {13 private System.ComponentModel.Container components = null;14 private System.Windows.Forms.Label outputLabel;15 16 public int x = 1; // instance variable17 18 public Scoping()19 {20 InitializeComponent();21 22 int x = 5; // variable local to constructor23 24 outputLabel.Text = outputLabel.Text +25 "local x in method Scoping is " + x;26 27 MethodA(); // MethodA has automatic local x;28 MethodB(); // MethodB uses instance variable x29 MethodA(); // MethodA creates new automatic local x30 MethodB(); // instance variable x retains its value31 32 outputLabel.Text = outputLabel.Text +33 "\n\nlocal x in method Scoping is " + x;34 }

This variable has class scope and can be used by any method in the class

This variable is local only to Scoping. It hides the value of the global variable

Will output the value of 5

Remains 5 despite changes to global version of x

Page 74: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline74

Scoping.cs

35 36 // Visual Studio .NET-generated code37 38 public void MethodA()39 {40 int x = 25; // initialized each time a is called41 42 outputLabel.Text = outputLabel.Text +43 "\n\nlocal x in MethodA is " + x +44 " after entering MethodA";45 ++x;46 outputLabel.Text = outputLabel.Text +47 "\nlocal x in MethodA is " + x + 48 " before exiting MethodA";49 }50 51 public void MethodB()52 {53 outputLabel.Text = outputLabel.Text +54 "\n\ninstance variable x is " + x +55 " on entering MethodB";56 x *= 10;57 outputLabel.Text = outputLabel.Text + 58 "\ninstance varable x is " + x +59 " on exiting MethodB";60 }61 62 // main entry point for application63 [STAThread]64 static void Main() 65 {66 Application.Run( new Scoping() );67 }68 69 } // end of class Scoping

Uses the global version of x (1)

Uses a new x variable that hides the value of the global x

Will permanently change the value of x globally

Page 75: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

757.12 Method Overloading

Procedure/Method overloading allows procedure/methods with the same name

but different parameter set for each procedure/method

1.Parameter Types2. Order of parameters3. Number of parameters

Procedure/Methods cannot be distinguished by return type. The same signature and different return types result in a

syntax error.

Usually perform the same or closely related task On different data types

Page 76: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline76

MethodOverload.cs

1 // Fig. 7.10: MethodOverload.cs2 // Using overloaded methods.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class MethodOverload : System.Windows.Forms.Form12 {13 private System.ComponentModel.Container components = null;14 15 private System.Windows.Forms.Label outputLabel;16 17 public MethodOverload()18 {19 InitializeComponent();20 21 // call both versions of Square22 outputLabel.Text = 23 "The square of integer 7 is " + Square( 7 ) +24 "\nThe square of double 7.5 is " + Square ( 7.5 );25 }26 27 // Visual Studio .NET-generated code28

Two versions of the square method are called

Page 77: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline77

MethodOverload.cs

Program Output

29 // first version, takes one integer30 public int Square ( int x )31 {32 return x * x;33 }34 35 // second version, takes one double36 public double Square ( double y )37 {38 return y * y;39 }40 41 [STAThread]42 static void Main()43 {44 Application.Run( new MethodOverload() );45 }46 47 } // end of class MethodOverload

One method takes an int as parameters

The other version of the method uses a double instead of an integer

Page 78: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline78

MethodOverload2.cs

Program Output

1 // Fig. 7.11: MethodOverload2.cs2 // Overloaded methods with identical signatures and3 // different return types.4 5 using System;6 7 class MethodOverload28 {9 public int Square( double x )10 {11 return x * x;12 }13 14 // second Square method takes same number,15 // order and type of arguments, error16 public double Square( double y )17 {18 return y * y;19 }20 21 // main entry point for application22 static void Main()23 {24 int squareValue = 2;25 Square( squareValue );26 }27 28 } // end of class MethodOverload2

This method returns an integer

This method returns a double number

Since the compiler cannot tell which method to use based on passed values an error is generated

Page 79: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

As of Visual C# 2010, methods can have optional parameters that allow the calling method to vary the number of arguments to pass.

An optional parameter specifies a default value that’s assigned to the parameter if the optional argument is omitted.

For example, the method headerpublic int Power( int baseValue, int exponentValue = 2)

specifies an optional second parameter.

You can create methods with one or more optional parameters.

All optional parameters must be placed to the right of the method’s non-optional parameters.

7.13 Optional Parameters

Page 80: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

When a parameter has a default value, the caller has the option of passing that particular argument.

public int Power( int baseValue, int exponentValue = 2)

specifies an optional second parameter.

Any call to Power must pass at least an argument for the parameter baseValue, or a compilation error occurs.

7.13 Optional Parameters (Cont.)

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 81: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Optionally, a second argument (for the exponentValue parameter) can be passed to Power.

Consider the following calls to Power:

Power()Power(10)Power(10, 3)

The first generates a compilation error because this method requires a minimum of one argument.

The second is valid because one argument (10) is being passed—the optional exponentValue is not specified in the method call.

7.13 Optional Parameters (Cont.)

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 82: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

7.13 Optional Parameters

The last call is also valid—10 is passed as the required argument and 3 is passed as the optional argument.

In the call that passes only one argument (10), parameter exponentValue defaults to 2, which is the default value specified in the method’s header.

Each optional parameter must specify a default value by using an equal (=) sign followed by the value.

Page 83: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

•At least base Value must pass. •exponentValue is an optional parameter•Prog. Error 7.11: Declaring a non-optional parameter to the right of an optional one is a compilation error.

Page 84: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Visual C# 2010 provides a new feature called named parameters, which enable you to call methods that receive optional parameters by providing only the optional arguments you wish to specify.

Explicitly specify the parameter’s name and value —separated by a colon (:)—in the argument list of the method call. For example:

t.SetTime( hour: 12, second: 22 ); // sets the time to 12:00:22

7.14 Named Parameters

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 85: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

The compiler assigns parameter hour the argument 12 and parameter second the argument 22.

The parameter minute is not specified, so the compiler assigns it the default value 0.

It’s also possible to specify the arguments out of order when using named parameters. The arguments for the required parameters must always be supplied.

7.14 Named Parameters

©1992-2011 by Pearson Education, Inc. All Rights Reserved.

Page 86: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

867.15 Recursion

Fig. 9.10 Recursive evaluation of 5!, 5 factorial. A recursive def n! = n (n – 1)!

(a) Procession of recursive calls.

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

(b) Values returned from each recursive call.

Final value = 120

5! = 5 * 24 = 120 is returned

4! = 4 * 6 = 24 is returned

2! = 2 * 1 = 2 is returned

3! = 3 * 2 = 6 is returned

1 returned

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

•(a) Each time method calls itself with a slightly simple problem until converges on the base case,

•(b) then returns to the previous problem,

and a sequence of returns follows up the line until the original problem eventually returns the final

result to the caller. Continually breaks problem down to simpler forms.

While the number to be processed is greater than 1, the function calls itself

When the number is 1 or less (the base case), 1 is returned, and each function call can now return an answer until each call has been resolved

Page 87: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

87

General format formany recursive functions

if (some condition for which answer is known)

// base case

solution statement

else // general case

recursive function call

SOME EXAMPLES . . .

Page 88: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

88

Recursive Definition is a definition in which something is defined in terms of smaller

version of itself.

int Factorial ( int number ) // Recursive Solution// Pre: number is assigned and number >= 0.{ if ( number == 0) //(1) base case

return 1 ; //(2)else // general case

return number * Factorial ( number - 1 ) ; //(3) //includes the simpler problem}

Page 89: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

897.15 Recursion

Recursive method Calls itself (directly or indirectly) through another method Method knows how to solve only a simples case base case Method divides problem into

1. Base case2. Simpler problem

– Each time method calls itself with a slightly simple problem until converges on the base case,

Continually breaks problem down to simpler forms

Must converge on the base case in order to end recursion

Each method call remains open (unfinished) Finishes each call and then finishes itself

Page 90: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

90Recursive Functions

Think of a recursive function as having infinitely

many copies of itself

Every call to a recursive function has

Its own code

Its own set of parameters and local variables

After completing a particular recursive call Control goes back to the calling environment, which is

the previous call

Page 91: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

91

int fact ( int number ) // Recursive Solution// Pre: number is assigned and number >= 0.{ if ( number == 0) //(1) base case return 1 ; //(2) else

// general case return number * fact ( number - 1 ) ; //(3)

//includes the simpler problem

} //(4)

Each method call remains open

Page 92: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline92

FactorialTest.cs

1 // Fig. 7.14: FactorialTest.cs2 // Recursive Factorial method.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class FactorialTest : System.Windows.Forms.Form12 {13 private System.ComponentModel.Container components = null;14 15 private System.Windows.Forms.Label outputLabel;16 17 public FactorialTest()18 {19 InitializeComponent();20 21 for ( long i = 0; i <= 10; i++ )22 outputLabel.Text += i + "! = " + 23 Factorial( i ) + "\n";24 }25

Page 93: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline93

FactorialTest.cs

Program Output

26 // Visual Studio .NET-generated code27 28 public long Factorial( long number )29 {30 if ( number <= 1 ) // base case31 return 1;32 33 else34 return number * Factorial( number - 1 );35 }36 37 [STAThread]38 static void Main() 39 {40 Application.Run( new FactorialTest());41 }42 43 } // end of class FactorialTest

The Factorial method calls itself (recursion)

The recursion ends when the value is less than or equal to 1

Page 94: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

94Iterative Solution

int Factorial ( int number )

// Pre: number is assigned and number >= 0.

{

int fact = 1;

for (int i = 2; i <= number; i++)

fact = fact * i;

return fact ;

}

Page 95: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

95Example Using Recursion: The Fibonacci Sequence

Fibonacci series Each number in the series is sum of two previous numbers

e.g., 0, 1, 1, 2, 3, 5, 8, 13, 21…

Recursive formulafibonacci(0) = 0fibonacci(1) = 1fibonacci(n) = fibonacci(n - 1) + fibonacci( n – 2 )

Each invocation of the method that does not match one of the base cases results in two additional recursive calls to the method

fibonacci(0) and fibonacci(1) are base cases Golden ratio

The ratio of successive fibonacci numbers converges on a constant value near 1.618

Performance Fibonacci-style recursive methods exponentially generate method calls (result in an

exponential “explosion” of calls) – avoid recursive style for some problems Hinders performance

– Fib(30) has over 2.7 million method calls

– Fib(31) has over 4 million method calls

– Fib(32) has over 7 million method calls

Page 96: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

96Example Using Recursion: The Fibonacci Sequence

Fig. Set of recursive calls to method Fibonacci (abbreviated as F).

return 1 return 0

F( 1 ) F( 0 ) return 1

F( 3 )

F( 2 ) F( 1 )+return

return +

Page 97: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline97

FibonacciTest.cs

1 // Fig. 6.16 ed1: FibonacciTest.cs2 // Recursive fibonacci method.3 4 using System;5 using System.Drawing;6 using System.Collections;7 using System.ComponentModel;8 using System.Windows.Forms;9 using System.Data;10 11 public class FibonacciTest : System.Windows.Forms.Form12 {13 private System.ComponentModel.Container components = null;14 15 private System.Windows.Forms.Button calculateButton;16 17 private System.Windows.Forms.TextBox inputTextBox;18 19 private System.Windows.Forms.Label displayLabel;20 private System.Windows.Forms.Label promptLabel;21 22 public FibonacciTest()23 {24 InitializeComponent();25 }26 27 // Visual Studio .NET-generated code28

Page 98: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline98

FibonacciTest.cs

29 // call Fibonacci and display results30 protected void calculateButton_Click(31 object sender, System.EventArgs e )32 {33 string numberString = ( inputTextBox.Text );34 int number = System.Convert.ToInt32( numberString ); 35 int fibonacciNumber = Fibonacci( number );36 displayLabel.Text = "Fibonacci Value is " + fibonacciNumber;37 }38 39 // calculates Fibonacci number40 public int Fibonacci( int number )41 {42 if ( number == 0 || number == 1 )43 return number;44 else45 return Fibonacci( number - 1 ) + Fibonacci( number - 2 );46 }47 48 [STAThread]49 static void Main() 50 {51 Application.Run( new FibonacciTest() );52 }53 54 } // end of class FibonacciTest

The number uses the Fibonacci method to get its result

Calls itself twice, to get the result of the the two previous numbers

The recursion ends when the number is 0 or 1

Page 99: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline99

FibonacciTest.cs Program Output

Exercise: Expand by displaying all generated numbers.

Exercise: Each number in the series is sum of the last one and the third from the last one.

e.g., 0, 1, 1, 1, 2, 3, 4, 6, 9, 13,…

First draw the sequence diagram for F(4).

Page 100: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

1007.15 Recursion vs. Iteration

Iteration Uses repetition structures (for, while or do/while) Repetition through explicitly use of repetition structure Terminates when loop-continuation condition fails Controls repetition by using a counter No extra calls so it doesn’t consume additional memory

Recursion Uses selection structures (if, if/else or switch) Repetition through repeated method calls Terminates when base case is satisfied Controls repetition by dividing problem into simpler one Recursive calls take time and consume additional memory

Both can have infinite loops

Page 101: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

101Recursion vs. Iteration (cont.)

Recursion

negatives: More overhead than iteration (time expensive) More memory intensive than iteration (the overhead of repeated method

calls) – memory space expensive Difficult to test and debug

positives: Recursion more naturally mirrors some problems Often can be implemented with only a few lines of code Can also be solved iteratively but may take large amount of code

Balance Choice between performance (iteration) and good software

engineering (recursion) Recursion usually more natural for some problems Modularizing programs in a neat, Hierarchical manner promotes good software engineering but it has a prize.

Page 102: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

1027.16 Passing Arguments: Call-By-Value vs. Call-By-Reference

Passing by value Send a method a copy of the object

Changes to the called method’s copy don’t effect the original variable’s value When returned are always returned by value Set by value by default for value-type variables

Passing by reference Send a method the actual reference point (to the original object in

memory) Causes the variable to be changed throughout the program

When returned are always returned by reference No overhead of copying large data Weaken security, b/c the called function can corrupt the caller’s data

Note: The references themselves passed by value

The ref keyword specifies by reference The out keyword means a called method will initialize the reference variable

Page 103: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline103

RefOutTest.cs

1 // Fig. 6.8 ed1 or 7.18 ed3 7.15 ed4: RefOutTest.cs2 // Demonstrating ref and out parameters.3 // 3 methods to calculate the square of an integer 4 using System;5 using System.Windows.Forms;6 7 class RefOutTest8 {9 // x is passed as a ref int (original value will change)10 static void SquareRef( ref int x )11 {12 x = x * x;13 }14 15 // original value can be changed and initialized16 static void SquareOut( out int x )17 {18 x = 6;19 x = x * x;20 }21 22 // x is passed by value (original value not changed)23 static void Square( int x )24 {25 x = x * x;26 }27 28 static void Main( string[] args )29 {30 // create a new integer value, set it to 531 int y = 5;32 int z; // declare z, but do not initialize it33

When passing a value by reference the value will be altered in the rest of the program as well

Since x is passed as out the variable can then be initiated in the method

Since not specified, this value is defaulted to being passed by value. The value of x will not be changed elsewhere in the program because a duplicate of the variable is created.

Since the methods are void they do not need a return value.

Page 104: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

2002 Prentice Hall.All rights reserved.

Outline104

RefOutTest.cs

34 // display original values of y and z35 string output1 = "The value of y begins as " 36 + y + ", z begins uninitialized.\n\n\n";37 38 // values of y and z are passed by reference39 RefOutTest.SquareRef( ref y );40 RefOutTest.SquareOut( out z );41 42 // display values of y and z after modified by methods43 // SquareRef and SquareOut44 string output2 = "After calling SquareRef with y as an " +45 "argument and SquareOut with z as an argument,\n" +46 "the values of y and z are:\n\n" + 47 "y: " + y + "\nz: " + z + "\n\n\n";48 49 // values of y and z are passed by value50 RefOutTest.Square( y );51 RefOutTest.Square( z );52 53 // values of y and z will be same as before because Square54 // did not modify variables directly55 string output3 = "After calling Square on both x and y, " +56 "the values of y and z are:\n\n" +57 "y: " + y + "\nz: " + z + "\n\n";58 59 MessageBox.Show( output1 + output2 + output3, 60 "Using ref and out Parameters", MessageBoxButtons.OK,61 MessageBoxIcon.Information );62 63 } // end method Main64 65 } // end class RefOutTest

The calling of the SquareRef and SquareOut methods

The calling of the Square method by passing the variables by value

Page 105: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Extra: Find Maximum (and Minimum) 105

Page 106: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Class to find MAX 106

Page 107: Jozef Goetz, 2011 1  2011 Pearson Education, Inc. All rights reserved.  2002 Prentice Hall. All rights reserved

Jozef Goetz, 2011

Driver to test CalculateMax()107