Date post: | 19-Dec-2015 |
Category: |
Documents |
View: | 222 times |
Download: | 1 times |
Arrays-1For use of IST410 Students only
Arrays
Arrays-2For use of IST410 Students only
Objectives
Declaring arrays Instantiating arrays Using arrays as parameters One and multi-dimensional arrays A few array utilities
For use of IST410 Students only Arrays-3
Arrays: Introduction
Concept of array is not unique to Java; all modern programming languages support arrays
Arrays exist in C, C++, Pascal, and other languages In COBOL, tables with exactly one field type are arrays Suppose we are interested in representing the result of a
survey that has exactly one question and 200 responses We could declare 200 variables: resp0, resp1, resp2,...,resp199 Or, we could declare an array with 200 elements, each element
representing a response If the name of the array is resp, then its elements are resp[0],
resp[1], resp[2],...,resp[199] Notice that indexes go from 0 to 199, one less than the array size
For use of IST410 Students only Arrays-4
Arrays: Introduction
An array index need not be a constant, it can be a variable or an expression that yields an integer value
int i;// other statementsi = 118;resp[i] = 20; //20 is being assigned to the 119th
// element of the resp array The data type of an array can be any legal data type i.e
both primitive and object types Arrays group objects of the same data type i.e all elements
of an array are of same type
For use of IST410 Students only Arrays-5
Declaring Arrays
In Java, arrays are objects Array objects are created in two steps:
Declare an array reference Construct the array instance
Declarationint m[]; or int [] m;Point p[]; or Point [] p;
Declaration leads to space allocation for one reference variable: space for m in the case of the int array and space for p for the other
Space is allocated for elements of the array only after the array is instantiated
Arrays-6For use of IST410 Students only
Instantiating Arrays
Arrays need to be instantiated before they can be used Arrays with primitive data types
m = new int[20];
Array of objectsp = new Point[20];
p[0] = new Point(); // objects need to be constructed
m 0 1 2 19
p 0 1 2 19
space for array elements
Object references only
Arrays-7For use of IST410 Students only
Instantiating Arrays
Array elements are automatically initialized when the array is instantiated
The initial value depends on the data type of the array elements
values of m are set to 0 since the type is intvalues of p are set to null since these are references
An array can be explicitly initialized at declarationint [] m = {1, 23, -2, 0, 12};Point [] p = { new Point(1,1), new Point(2,3),
new Point(3,5)};String [] s = {“IST203”,”IST211”,”IST221”};
Arrays-8For use of IST410 Students only
Traversing Arrays
Arrays are often traversed using loops We can set up a loop to traverse through an array
for (int i = 0; i < 20; i++) {System.out.println(“Element
“+i+”=“+m[i]); } Use of fixed numbers like 20 is potentially error prone
since it is illegal to exceed the boundary of an array All arrays know their lengths; we can use this feature to
traverse any array
Arrays-9For use of IST410 Students only
Traversing Arrays
The count of array elements is stored in the array’s length attribute
We can traverse the array using the value of length to control for array boundaries
for (int i = 0; i < m.length; i++) {System.out.println(“Element
“+i+”=“+m[i]); } Traversing an array using the length attribute is a safe
technique
Arrays-10For use of IST410 Students only
Copying Arrays
Need to copy an array arises in many applications We can try to copy an array using the following
int [] a = {1,2,3,4,5};int [] b = a;
Notice that we did not duplicate the array, but copied the reference only; both a and b refer to the same array
b
a 1 2 3 4 5
Arrays-11For use of IST410 Students only
Copying Arrays
Arrays can be copied using System.arraycopy
System.arraycopy(a, 0, b, 0, a.length);
The general syntax of arraycopySystem.arraycopy(source array, source index, target array, target index, # of elements);
a
b
1 2 3 4 5
1 2 3 4 5
Arrays-12For use of IST410 Students only
Comparing Arrays
Consider the following two arrays int [] b = {1,2,3,4,5};
int [] c = {1,2,3,4,5};if (b = = c) System.out.println(”b and c are same arrays");else System.out.println(”b and c are different arrays");
Unfortunately, in the above statement, b would be found not equal to c
We are comparing references; b and c refer to TWO DIFFERENT objects, hence unequal
Arrays-13For use of IST410 Students only
Comparing Arrays
We can compare arrays using the equals method import java.util.Arrays;
int [] b = {1,2,3,4,5};int [] c = {1,2,3,4,5};if (Arrays.equals(b,c)) System.out.println(”b and c are same arrays");else System.out.println(”b and c are different arrays");
Contents of arrays are compared when Arrays.equals is used
java.util.Arrays provides a number of overloaded equals method to compare arrays of different types
Arrays-14For use of IST410 Students only
Multidimensional Arrays
Java arrays can be multidimensional A multidimensional array is an array of arrays For example, an array that has 3 rows and 5 columns can
be shown as the following
We need 2 different indexes to designate an individual cell
a[0] -----> a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1] -----> a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2] -----> a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
Arrays-15For use of IST410 Students only
Multidimensional Arrays
As in the case of one dimensional arrays, creation of a multidimensional array is a two-step process
int [][] p;p = new int[4][];
Since the second dimension of p is undefined, elements of p need to be defined one at a time
p[0] = new int[5];p[1] = new int[5]; and so on
The size of a multidimensional array may be completely defined at declarationint [][] p = new int[4][5]; // 4 rows and 5 columns
Arrays-16For use of IST410 Students only
Multidimensional Arrays
It is illegal to leave first dimension empty in the declaration of a multidimensional array
int [][] m = new int[][5]; // does not compile When instantiated, elements of an array are automatically
initialized to the appropriate default value based on the array’s data type
In our example, p is an int array. All elements of p are initially set to 0.
For an array of objects, elements would be initialized to null
Arrays-17For use of IST410 Students only
Multidimensional Arrays
Multidimensional arrays can be initialized at declarationint [][] m = { {1,2,3}, {4,5,6,7}, {8,9,10,11}};
A multidimensional array of objects is declared using the familiar syntax
Point [][] pt = new Point[5][10]; Each cell of pt then is a reference and and objects
themselves need to be instantiatedpt[0][0] = new Point();
pt[0][1] = new Point();
Arrays-18For use of IST410 Students only
Multidimensional Arrays
A multidimensional array need not be rectangular For example, a twodimensional array can be non-
rectangular as shown below
int [][] m = new int[4][]; m[0] = new int[5];
m[1] = new int[6]; m[2] = new int[10]; m[3] = new int[12];
Arrays-19For use of IST410 Students only
Multidimensional Arrays
A multidimensional array can be traversed using length attributefor (i = 0; i < m.length; i++)
for (j = 0; j < m[i].length; j++)System.out.println(“Element = “+m[i][j]);
Notice that so long as the length attribute of an array is used, traversing a non-rectangular array is not a problem
Arrays-20For use of IST410 Students only
Arrays as Parameters
public class ArraySearch { //ArraySearch.java public static void main(String args[]) { char [] c = {'A','C','D','E','F','H','K','J'}; int index = ArraySearch.find(c,'F'); if (index == -1)
System.out.println("Search character not found"); else
System.out.println("F is at index position "+index); } public static int find(char[]t, char s){ int index = 0; int location = -1; while (index < t.length && location == -1) {
if (t[index] == s){ location = index; } index++;
} return location; }}
Note the declaration of array parameter in the method find, and also how arrays are passed into a method
Arrays-21For use of IST410 Students only
Sorting one dimensional arrays
An array can be sorted as follows
import java.util.Arrays;int []m = {1,2,45,56,78,34,8,-1};
Arrays.sort(m);
Sorted array is in ascending order A number of overloaded sort methods are available sort method can be applied to one dimensional arrays only
Arrays-22For use of IST410 Students only
Binary search: one dimensional Arrays
Binary search for a value int []m = {1,2,45,56,78,34,8,-1}; Arrays.sort(m);int r = Arrays.binarySearch(m,8);if (r < 0)
System.out.println(“Item not found”);else
System.out.println(“Item at “+r); If the item searched for is in the list, the correct index is
returned If r is negative, the item does not exist in the list. An
index equal to (-r-1) represents the index where the value can be inserted to keep the array sorted
Arrays-23For use of IST410 Students only
Exercise
Write a MyArray class that uses a one-dimensional array of 100 elements. This array has the following methods:
a constructor that initializes the elements to a random integer between 10 and 140
a method that returns the average of all elements of the array a method that returns the sum of all elements
Write a MyTwodArray class that uses a two-dimensional array. This array has the following methods
a constructor that initializes the elements to a random character a method that takes 2 arguments: a row index and a search
character and returns the number of times this character occurs in the row
To be more challenging, take the 2 dimensional array sizes as command line arguments and test to make sure that these sizes are in fact read in as arguments before proceeding further