An Array Passed as Argument
|
|
The main purpose of using an array is to use various
pseudo-variables grouped under one name. Still, an array is primarily a
variable. As such, it can be passed to a method and it can be returned from a
method. Like a regular variable, an array can be passed as argument.
To do this, in the parentheses of a method, provide the data type, the empty
square brackets, and the name of the argument. Here is an example:
using System;
namespace ConsoleApplication1
{
public static class Program
{
static void Main()
{
}
static void DisplayNumber(Double[] n)
{
}
}
}
When an array has been passed to a method, it can be used
in the body of the method as any array can be, following the rules of array
variables. For example, you can display its values. The simplest way you can use an array is to display the
values of its members. This could be done as follows:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
}
static void DisplayNumber(Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
To call a method that takes an array as argument, simply
type the name of the array in the parentheses of the called method. Here is
an example:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Double[] number = new Double[5];
number[0] = 12.44;
number[1] = 525.38;
number[2] = 6.28;
number[3] = 2448.32;
number[4] = 632.04;
DisplayNumber(number);
}
static void DisplayNumber(Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
This would produce:
Number 0: 12.44
Number 1: 525.38
Number 2: 6.28
Number 3: 2448.32
Number 4: 632.04
When an array is passed as argument to a method, the array
is passed by reference. This means that, if the method makes any change to the
array, the change would be kept when the method exits. You can use this
characteristic to initialize an array from a method. Here is an example:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Double[] number = new Double[5];
InitializeList(number);
DisplayNumber(number);
}
static void InitializeList(Double[] nbr)
{
nbr[0] = 12.44;
nbr[1] = 525.38;
nbr[2] = 6.28;
nbr[3] = 2448.32;
nbr[4] = 632.04;
// The array has changed
}
static void DisplayNumber(Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
Notice that the InitializeList() method receives an
un-initialized array but returns it with new values. To enforce the concept of passing a variable by reference,
you can also accompany an array argument with the ref keyword, both when
defining the method and when calling it. Here is an example:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Double[] number = new Double[5];
InitializeList(ref number);
DisplayNumber(ref number);
}
static void InitializeList(ref Double[] nbr)
{
nbr[0] = 12.44;
nbr[1] = 525.38;
nbr[2] = 6.28;
nbr[3] = 2448.32;
nbr[4] = 632.04;
}
static void DisplayNumber(ref Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
Practical
Learning: Passing an Array as Argument |
|
- To use examples of passing arrays to methods, change the IceCreamOrder.cs file as follows:
using System;
namespace IceCream1
{
class IceCreamOrder
{
public const decimal BasePrice = 1.55M;
int ChoiceFlavor;
int ChoiceContainer;
int ChoiceIngredient;
int Scoops;
decimal TotalPrice;
private string[] PrepareFlavors()
{
string[] Flavors = new string[10];
Flavors[0] = "Vanilla";
Flavors[1] = "Cream of Cocoa";
Flavors[2] = "Chocolate Chip";
Flavors[3] = "Organic Strawberry";
Flavors[4] = "Butter Pecan";
Flavors[5] = "Cherry Coke";
Flavors[6] = "Chocolate Brownies";
Flavors[7] = "Caramel Au Lait";
Flavors[8] = "Chunky Butter";
Flavors[9] = "Chocolate Cookie";
return Flavors;
}
private void CreateIngredients(ref string[] Ingredients)
{
Ingredients[0] = "No Ingredient";
Ingredients[1] = "Peanuts";
Ingredients[2] = "M & M";
Ingredients[3] = "Cookies";
}
private void ChooseContainer(ref string[] Containers)
{
Containers[0] = "Cone";
Containers[1] = "Cup";
Containers[2] = "Bowl";
do
{
try
{
Console.WriteLine("What type of container do you want?");
for (int i = 0; i < 3; i++)
Console.WriteLine("{0} - {1}", i + 1, Containers[i]);
Console.Write("Your Choice? ");
ChoiceContainer = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceContainer < 1 || ChoiceContainer > 3)
Console.WriteLine("Invalid Choice - Try Again!");
} while (ChoiceContainer < 1 || ChoiceContainer > 3);
}
private void RequestFlavor(ref string[] Flavors)
{
Flavors = PrepareFlavors();
do
{
try
{
Console.WriteLine("What type of flavor do you want?");
for (int i = 0; i < 10; i++)
Console.WriteLine("{0} - {1}", i + 1, Flavors[i]);
Console.Write("Your Choice? ");
ChoiceFlavor = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceFlavor < 1 || ChoiceFlavor > 10)
Console.WriteLine("Invalid Choice - Try Again!\n");
} while (ChoiceFlavor < 1 || ChoiceFlavor > 10);
}
private void ProcessIngredients(ref string[] Ingredients)
{
CreateIngredients(ref Ingredients);
do
{
try
{
Console.WriteLine("Do you want an ingredient or not");
for (int i = 0; i < 4; i++)
Console.WriteLine("{0} - {1}", i + 1, Ingredients[i]);
Console.Write("Your Choice? ");
ChoiceIngredient = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceIngredient < 1 || ChoiceIngredient > 4)
Console.WriteLine("Invalid Choice - Try Again!");
} while (ChoiceIngredient < 1 || ChoiceIngredient > 4);
}
private void GetTheNumberOfScoops()
{
do
{
try
{
Console.Write("How many scoops(1, 2, or 3)? ");
Scoops = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (Scoops < 1 || Scoops > 3)
Console.WriteLine("Invalid Choice - Try Again!");
} while (Scoops < 1 || Scoops > 3);
}
public void ProcessAnOrder()
{
decimal PriceIngredient, PriceScoop;
string[] Flavor = new string[10];
string[] Container = new string[3];
string[] Ingredient = new string[4];
RequestFlavor(ref Flavor);
ChooseContainer(ref Container);
ProcessIngredients(ref Ingredient);
GetTheNumberOfScoops();
if (ChoiceIngredient == 2 ||
ChoiceIngredient == 3 ||
ChoiceIngredient == 4)
PriceIngredient = 0.50M;
else
PriceIngredient = 0.00M;
if (Scoops == 1)
PriceScoop = 0.65M;
else if (Scoops == 2)
PriceScoop = 1.05M;
else
PriceScoop = 1.55M;
Console.WriteLine("Ice Cream Vendor Machine");
TotalPrice = BasePrice + PriceScoop + PriceIngredient;
DisplayReceipt(ref Flavor, ref Container, ref Ingredient);
}
public void DisplayReceipt(ref string[] Flv,
ref string[] Cont,
ref string[] Ingrd)
{
Console.WriteLine("\n==================================");
Console.WriteLine("Ice Cream Order");
Console.WriteLine("----------------------------------");
Console.WriteLine("Flavor: {0}", Flv[ChoiceFlavor]);
Console.WriteLine("Container: {0}", Cont[ChoiceContainer]);
Console.WriteLine("Ingredient: {0}", Ingrd[ChoiceIngredient]);
Console.WriteLine("Scoops: {0}", Scoops);
Console.WriteLine("Total Price: {0:C}", TotalPrice);
Console.WriteLine("==================================");
}
}
}
|
- Execute the application and test it
- Close the DOS window
Returning an Array From a Method
|
|
Like a normal variable, an array can be returned from
a method. This means that the method would return a variable that
carries various values. When declaring or defining the method, you must
specify its data type. When the method ends, it would return an array
represented by the name of its variable.
To declare a method that returns an array, on the
left of the method's name, provide the type of value that the returned
array will be made of, followed by empty square brackets. Here is an
example:
using System;
namespace ConsoleApplication1
{
public static class Program
{
static void Main()
{
Double[] number = new Double[5];
DisplayNumber(number);
}
static Double[] InitializeList()
{
}
static void DisplayNumber(Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
Remember that a method must always return an
appropriate value depending on how it was declared. In this case, if it
was specified as returning an array, then make sure it returns an array
and not a regular variable. One way you can do this is to declare and
possibly initialize a local array variable. After using the local array,
you return only its name (without the square brackets). Here is an
example:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Double[] number = new Double[5];
DisplayNumber(number);
Console.ReadLine();
}
static Double[] InitializeList()
{
Double[] nbr = new Double[5];
nbr[0] = 12.44;
nbr[1] = 525.38;
nbr[2] = 6.28;
nbr[3] = 2448.32;
nbr[4] = 632.04;
return nbr;
}
static void DisplayNumber(Double[] n)
{
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
When a method returns an array, that method can be
assigned to an array declared locally when you want to use it. Remember to
initialize a variable with such a method only if the variable is an array. If you initialize
an array variable with a method that doesn't return an array, you would receive an error.
Here is an example:
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
#endregion
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Double[] number = new Double[5];
number = InitializeList();
DisplayNumber(number);
Console.ReadLine();
}
static Double[] InitializeList()
{
Double[] nbr = new Double[5];
nbr[0] = 12.44;
nbr[1] = 525.38;
nbr[2] = 6.28;
nbr[3] = 2448.32;
nbr[4] = 632.04;
return nbr;
}
static void DisplayNumber(Double[] n)
{
Console.WriteLine("List of Numbers");
for (int i = 0; i < 5; i++)
Console.WriteLine("Number {0}: {1}", i, n[i]);
}
}
}
Practical
Learning: Returning an Array From a Method |
|
- To apply an example of returning an array from a method, and to complete
this exercise, change the IceCreamOrder.cs file
as follows:
using System;
namespace IceCream1
{
class IceCreamOrder
{
public const decimal BasePrice = 1.55M;
int ChoiceFlavor;
int ChoiceContainer;
int ChoiceIngredient;
int Scoops;
decimal TotalPrice;
private string[] PrepareFlavors()
{
string[] Flavors = new string[10];
Flavors[0] = "Vanilla";
Flavors[1] = "Cream of Cocoa";
Flavors[2] = "Chocolate Chip";
Flavors[3] = "Organic Strawberry";
Flavors[4] = "Butter Pecan";
Flavors[5] = "Cherry Coke";
Flavors[6] = "Chocolate Brownies";
Flavors[7] = "Caramel Au Lait";
Flavors[8] = "Chunky Butter";
Flavors[9] = "Chocolate Cookie";
return Flavors;
}
private void CreateIngredients(ref string[] Ingredients)
{
Ingredients[0] = "No Ingredient";
Ingredients[1] = "Peanuts";
Ingredients[2] = "M & M";
Ingredients[3] = "Cookies";
}
private void ChooseContainer(ref string[] Containers)
{
Containers[0] = "Cone";
Containers[1] = "Cup";
Containers[2] = "Bowl";
do
{
try
{
Console.WriteLine("What type of container do you want?");
for (int i = 0; i < 3; i++)
Console.WriteLine("{0} - {1}", i + 1, Containers[i]);
Console.Write("Your Choice? ");
ChoiceContainer = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceContainer < 1 || ChoiceContainer > 3)
Console.WriteLine("Invalid Choice - Try Again!");
} while (ChoiceContainer < 1 || ChoiceContainer > 3);
}
private void RequestFlavor(ref string[] Flavors)
{
Flavors = PrepareFlavors();
do
{
try
{
Console.WriteLine("What type of flavor do you want?");
for (int i = 0; i < 10; i++)
Console.WriteLine("{0} - {1}", i + 1, Flavors[i]);
Console.Write("Your Choice? ");
ChoiceFlavor = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceFlavor < 1 || ChoiceFlavor > 10)
Console.WriteLine("Invalid Choice - Try Again!\n");
} while (ChoiceFlavor < 1 || ChoiceFlavor > 10);
}
private void ProcessIngredients(ref string[] Ingredients)
{
CreateIngredients(ref Ingredients);
do
{
try
{
Console.WriteLine("Do you want an ingredient or not");
for (int i = 0; i < 4; i++)
Console.WriteLine("{0} - {1}", i + 1, Ingredients[i]);
Console.Write("Your Choice? ");
ChoiceIngredient = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (ChoiceIngredient < 1 || ChoiceIngredient > 4)
Console.WriteLine("Invalid Choice - Try Again!");
} while (ChoiceIngredient < 1 || ChoiceIngredient > 4);
}
private void GetTheNumberOfScoops()
{
do
{
try
{
Console.Write("How many scoops(1, 2, or 3)? ");
Scoops = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("You must enter a valid number and no other character!");
}
if (Scoops < 1 || Scoops > 3)
Console.WriteLine("Invalid Choice - Try Again!");
} while (Scoops < 1 || Scoops > 3);
}
public void ProcessAnOrder()
{
decimal PriceIngredient, PriceScoop;
string[] Flavor = new string[10];
string[] Container = new string[3];
string[] Ingredient = new string[4];
RequestFlavor(ref Flavor);
ChooseContainer(ref Container);
ProcessIngredients(ref Ingredient);
GetTheNumberOfScoops();
if (ChoiceIngredient == 2 ||
ChoiceIngredient == 3 ||
ChoiceIngredient == 4)
PriceIngredient = 0.50M;
else
PriceIngredient = 0.00M;
if (Scoops == 1)
PriceScoop = 0.65M;
else if (Scoops == 2)
PriceScoop = 1.05M;
else
PriceScoop = 1.55M;
Console.WriteLine("Ice Cream Vendor Machine");
TotalPrice = BasePrice + PriceScoop + PriceIngredient;
DisplayReceipt(ref Flavor, ref Container, ref Ingredient);
}
public void DisplayReceipt(ref string[] Flv,
ref string[] Cont,
ref string[] Ingrd)
{
Console.WriteLine("\n==================================");
Console.WriteLine("Ice Cream Order");
Console.WriteLine("----------------------------------");
Console.WriteLine("Flavor: {0}", Flv[ChoiceFlavor]);
Console.WriteLine("Container: {0}", Cont[ChoiceContainer]);
Console.WriteLine("Ingredient: {0}", Ingrd[ChoiceIngredient]);
Console.WriteLine("Scoops: {0}", Scoops);
Console.WriteLine("Total Price: {0:C}", TotalPrice);
Console.WriteLine("==================================");
}
}
}
|
- Execute the application and test it. Here is an example:
What type of flavor do you want?
1 - Vanilla
2 - Cream of Cocoa
3 - Chocolate Chip
4 - Organic Strawberry
5 - Butter Pecan
6 - Cherry Coke
7 - Chocolate Brownies
8 - Caramel Au Lait
9 - Chunky Butter
10 - Chocolate Cookie
Your Choice? 9
What type of container do you want?
1 - Cone
2 - Cup
3 - Bowl
Your Choice? 2
Do you want an ingredient or not
1 - No Ingredient
2 - Peanuts
3 - M & M
4 - Cookies
Your Choice? 3
How many scoops(1, 2, or 3)? 2
Ice Cream Vendor Machine
==================================
Ice Cream Order
----------------------------------
Flavor: Chocolate Cookie
Container: Bowl
Ingredient: Cookies
Scoops: 2
Total Price: $3.10
==================================
Press any key to continue . . .
|
|
- Close the DOS window
|
|