Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
CHAPTER 7
Arrays and the
ArrayList Class
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-2
Chapter Topics
Chapter 7 discusses the following main topics:
– Introduction to Arrays
– Processing Array Contents
– Passing Arrays as Arguments to Methods
– Some Useful Array Algorithms and Operations
– Returning Arrays from Methods
– String Arrays
– Arrays of Objects
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-3
Chapter Topics
Chapter 7 discusses the following main topics:
– The Sequential Search Algorithm
– Parallel Arrays
– Two-Dimensional Arrays
– Arrays with Three or More Dimensions
– The Selection Sort and the Binary Search
– Command-Line Arguments
– The ArrayList Class
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-4
Introduction to Arrays
• Primitive variables are designed to hold only one value at a
time. e.g., int number;
• Arrays allow us to create a collection of like values that are
indexed.
• An array can store any type of data but only one type of data
at a time.
• An array is a list of data elements.
e.g., int[ ] numbers;
707 727 737 … 787addr of …
numbers numbers[0] numbers[1] numbers[2] numbers[7]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-5
Introduction to Arrays
final int ARRAY_SIZE = 5;
int [] numbers = new int[ARRAY_SIZE];
numbers[0] = 25;
numbers[3] = 45;
25 0 0 45 0
numbers
variablenumbers[0] numbers[1] numbers[2] numbers[3] numbers[4]
final int ARRAY_SIZE = 5;
int [] numbers = new int[ARRAY_SIZE];
numbers[0] = 25;
numbers[3] = 45;
Array element values are initialized to 0.
double dNumbers[] = new double[ARRAY_SIZE];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-6
Creating Arrays
• An array is an object so it needs an object reference.
// Declare a reference to an array that will
// hold integers.
int[] numbers;
• The next step creates the array and assigns its address to the
numbers variable.
// Create a new array that will hold 6 integers.
numbers = new int[6];
Array element values are initialized to 0.
Array indexes always start at 0.
0
index 0
0
index 1
0
index 2
0
index 3
0
index 4
0
index 5
numbers[0]
numbers[5]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-7
Creating Arrays
• It is possible to declare an array reference and create it
in the same statement.int[] numbers = new int[6]; numbers variable
numbers references an array
with memory for 6 int values
• Arrays may be of any type. Elem 0 Elem 1 ….. Elem 5
float[] temperatures = new float[100];
char[] letters = new char[41];
long[] units = new long[50];
double[] sizes = new double[1200];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-8
Creating Arrays
• The array size must be a non-negative number.
• It may be a literal value, a constant, or variable.
• Use a final variable as a size declarator.
final int ARRAY_SIZE = 6;
int[] numbers = new int[ARRAY_SIZE];
• Once created, an array size is fixed and cannot be changed.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_arrayDemos;import java.util.Random;
public class Chap07_ArrayDemos {public static void main(String[] args) {
final int ARRAY_SIZE = 10;int numbers[] = new int[ARRAY_SIZE];for (int index = 0; index < ARRAY_SIZE; index++){
Random rand = new Random();numbers[index] = rand.nextInt(3)-1; //[-1, 2)
System.out.println(index + " " + numbers[index]);
}//end of for index...
System.out.println("\nThe numbers array has:");for (int i = 0; i < ARRAY_SIZE; i++){
System.out.printf("numbers [ %d ] is %d.\n", i, numbers[i]);
}//end of for i ...}//end of main
}
0 1
1 0
2 -1
3 0
4 1
5 1
6 0
7 -1
8 -1
9 0
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
0 1
1 0
2 -1
3 0
4 1
5 1
6 0
7 -1
8 -1
9 0
The numbers array has:numbers [ 0 ] is 1.numbers [ 1 ] is 0.numbers [ 2 ] is -1.numbers [ 3 ] is 0.numbers [ 4 ] is 1.numbers [ 5 ] is 1.numbers [ 6 ] is 0.numbers [ 7 ] is -1.numbers [ 8 ] is -1.numbers [ 9 ] is 0.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_arrayDemos;import java.util.Random;
public class Chap07_ArrayDemos {public static void main(String[] args) {
final int ARRAY_SIZE = 10;int [] numbers = new int[ARRAY_SIZE];for (int index = 0; index < ARRAY_SIZE; index++){
Random rand = new Random();numbers[index] = rand.nextInt(100)-50;//[-50, 50)System.out.println(index + " " +
numbers[index]);}//end of for index...
System.out.println("\nThe numbers array has:");for (int i = 0; i < ARRAY_SIZE; i++){
System.out.printf("numbers [ %d ] is %d.\n", i, numbers[i]);
}//end of for i ...}//end of main
}
0 -491 -252 93 -144 285 266 217 -258 119 -18
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
0 -491 -252 93 -144 285 266 217 -258 119 -18
The numbers array has:numbers [ 0 ] is -49.numbers [ 1 ] is -25.numbers [ 2 ] is 9.numbers [ 3 ] is -14.numbers [ 4 ] is 28.numbers [ 5 ] is 26.numbers [ 6 ] is 21.numbers [ 7 ] is -25.numbers [ 8 ] is 11.numbers [ 9 ] is -18.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
//insert the following program segment at the end of the //previous program before “}//the end of main”
double dNumbers [] = new double[ARRAY_SIZE];Scanner kb = new Scanner(System.in);for (int index = 0; index < ARRAY_SIZE-5; index++) {
System.out.println("Enter a floating point number: ");dNumbers[index] = kb.nextDouble();
}System.out.println("\nThe numbers array has:");for (int i = 0; i < ARRAY_SIZE; i++){System.out.printf("the floating point numbers [ %d ] is
%.4f.\n", i, dNumbers[i]);\}//end of for i ...System.out.println("\nThe size of the array dNumber[] is
" + dNumbers.length);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Enter a floating point number: 20.4Enter a floating point number: 21.5Enter a floating point number: 22.6Enter a floating point number: 23.666666Enter a floating point number: 24.7777777
The numbers array has:the floating point numbers [ 0 ] is 20.4000.the floating point numbers [ 1 ] is 21.5000.the floating point numbers [ 2 ] is 22.6000.the floating point numbers [ 3 ] is 23.6667.the floating point numbers [ 4 ] is 24.7778.the floating point numbers [ 5 ] is 0.0000.the floating point numbers [ 6 ] is 0.0000.the floating point numbers [ 7 ] is 0.0000.the floating point numbers [ 8 ] is 0.0000.the floating point numbers [ 9 ] is 0.0000.
The size of the array dNumber[] is 10
Defined by default
Round off
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-15
Accessing the Elements of an Array
• An array is accessed by:
– the reference name
– a subscript that identifies which element in the array to
access.
numbers[0] = 20; //pronounced "numbers sub zero"
numbers[0]
0
numbers[1]
0
numbers[2]
0
numbers[3]
0
numbers[4]
70
numbers[5]
20
numbers
numbers[5] = 70; //pronounced "numbers sub five"
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-16
Inputting and Outputting Array Elements
• Array elements can be treated as any other variable.
• They are simply accessed by the same name and a
subscript.
• See example: ArrayDemo1.java
• Array subscripts can be accessed using variables (such
as for loop counters).
for (int index = 0; numbers[index] > 0 && index < 6; index++) {
System.out.printf(“numbers [ %d ] is %d.\n”, index, numbers[index]) };
• See example: ArrayDemo2.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-17
Bounds Checking
• Array indexes always start at zero and continue to (array length - 1).
int [] values = new int[12];
size = values.length;//assign 12 to the size.
• This array would have indexes 0 through 11.
• See example: InvalidSubscript.java
• In for loops, it is typical to use i, j, and k as counting variables.
– It might help to think of i as representing the word index.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_arrayDemos;import java.util.Random;
public class Chap07_ArrayDemos {public static void main(String[] args) {
final int ARRAY_SIZE = 10;int numbers[] = new int[ARRAY_SIZE];for (int index = 0; index < ARRAY_SIZE-2; index++){
Random rand = new Random();numbers[index] = rand.nextInt(100)-50;System.out.println(index + " " + numbers[index]);
}//end of for index...
System.out.println("The size of array numbers is " + numbers.length + "\n\nThe numbers array has:");for (int i = 0; i < ARRAY_SIZE; i++){
System.out.printf("numbers [ %d ] is %d.\n", i, numbers[i]);}//end of for i ...
}//end of main}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
0 -121 492 -223 -314 -15 426 -267 -5The size of array numbers is 10
The numbers array has:numbers [ 0 ] is -12.numbers [ 1 ] is 49.numbers [ 2 ] is -22.numbers [ 3 ] is -31.numbers [ 4 ] is -1.numbers [ 5 ] is 42.numbers [ 6 ] is -26.numbers [ 7 ] is -5.numbers [ 8 ] is 0.numbers [ 9 ] is 0.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
for (int i = 0; i < numbers.length; i++){
System.out.printf("numbers [ %d ] is %d.\n", i, numbers[i]);
}//end of for i ...
The numbers array has:numbers [ 0 ] is -14.numbers [ 1 ] is -1.numbers [ 2 ] is -42.numbers [ 3 ] is -6.numbers [ 4 ] is -19.numbers [ 5 ] is -46.numbers [ 6 ] is 45.numbers [ 7 ] is 20.numbers [ 8 ] is 0.numbers [ 9 ] is 0.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-21
Off-by-One Errors
• It is very easy to be off-by-one when accessing arrays.
// This code has an off-by-one error.
int[] numbers = new int[100];
int[] numbers_i = new int[100];
for (int i = 1; i <= 100; i++){
numbers[i] = 99;
numbers_i[i] = i;}
• Here, the equal sign allows the loop to continue on to index 100, where 99 is the last index in the array.
• This code would throw an ArrayIndexOutOfBoundsException.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
for (int i = 0; i <= ARRAY_SIZE; i++){
System.out.printf("numbers [ %d ] is %d.\n", i, numbers[i]);
}//end of for i ...
The numbers array has:numbers [ 0 ] is 18.numbers [ 1 ] is -15.numbers [ 2 ] is -19.numbers [ 3 ] is -37.numbers [ 4 ] is 27.numbers [ 5 ] is -16.numbers [ 6 ] is 23.numbers [ 7 ] is 44.numbers [ 8 ] is 0.numbers [ 9 ] is 0.Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10at ch07_arrayDemos.Chap07_ArrayDemos.main(Chap07_ArrayDemos.java:21)
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-23
Array Initialization
//use new keyword to create an array object
int[ ] days = new int[12];
// or
int [ ] days;
days = new int[12];
// or
final int DAYS_SIZE = 12;
int [ ] days = new int[DAYS_SIZE];
•See example: ArrayInitialization.java
0 0 0 0 0 0 0 0 0 0 0 0
days
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-24
Array Initialization
//use new keyword to create an array object
int[ ] days = new int[12];
//Or
int [ ] days;
days = new int[12];
• Once an array is created, its size cannot be changed.
• By default, Java initializes array elements with 0.
• Java performs array bounds checking, which means that it does not
allow a statement to use a subscript that is outside the range of valid
subscripts for an array. The valid subscripts for the array days are 0
through 11.
•See example: ArrayInitialization.java
0 0 0 0 0 0 0 0 0 0 0 0
days
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-25
Array Initialization
• When relatively few items need to be initialized, an
initialization list can be used to initialize the array.
int[]days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
• The numbers in the list are stored in the array in order:
– days[0] is assigned 31,
– days[1] is assigned 28,
– days[2] is assigned 31,
– days[3] is assigned 30,
– etc.
– days[11] is assigned 31.
• See example: ArrayInitialization.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_01ArrayDemos;
public class Chap07_01ArrayDemos {
public static void main(String[] args) {
int[]days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String str = "\nDays[%d] = %d.";
for (int index = 0; index < 12; index++)
{
System.out.printf(str, index, days[index]);
}//end for
}//end main
}
Days[0] = 31.
Days[1] = 28.
Days[2] = 31.
Days[3] = 30.
Days[4] = 31.
Days[5] = 30.
Days[6] = 31.
Days[7] = 31.
Days[8] = 30.
Days[9] = 31.
Days[10] = 30.
Days[11] = 31
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};for (int i = 0; i < days.length; i++){
System.out.printf("Month[ %d ] has %d days\n", i, days[i]);
}System.out.println("\nThe end.\n"); Month[ 0 ] has 31 days
Month[ 1 ] has 28 daysMonth[ 2 ] has 31 daysMonth[ 3 ] has 30 daysMonth[ 4 ] has 31 daysMonth[ 5 ] has 30 daysMonth[ 6 ] has 31 daysMonth[ 7 ] has 31 daysMonth[ 8 ] has 30 daysMonth[ 9 ] has 31 daysMonth[ 10 ] has 30 daysMonth[ 11 ] has 31 days
The end.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-28
Alternate Array Declaration
• Previously we showed arrays being declared:
declare an array variable numbers which does not create an array.
int[] numbers;
However, the brackets can also go here:
int numbers[];
These are equivalent but the first style is typical.
Then use the new key word to create an array and assigned it address to the numbers variable.
numbers = new int[6];
Or we simply write
int [ ] numbers = {101, 102, 103, 104, 105};
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int numbers[];
numbers = new int[6];
String str1 = "\nnumbers[%d] has %d";
for (int index = 0; index < 6; index++)
{
System.out.printf(str1, index, numbers[index]);
}//end for
numbers[0] has 0
numbers[1] has 0
numbers[2] has 0
numbers[3] has 0
numbers[4] has 0
numbers[5] has 0
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int numbers[];
numbers = new int[6];
numbers = {101, 102, 103, 104, 105, 106};
String str1 = "\nnumbers[%d] has %d";
for (int index = 0; index < 6; index++)
{
System.out.printf(str1, index, numbers[index]);
}//end for
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Array constants can only be used in initializers
at
ch07_01ArrayDemos.Chap07_01ArrayDemos.main(Chap07_01ArrayD
emos.java:15)
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
//int numbers[];
//numbers = new int[6];
int [] numbers = {101, 102, 103, 104, 105, 106};
String str1 = "\nnumbers[%d] has %d";
for (int index = 0; index < 6; index++)
{
System.out.printf(str1, index, numbers[index]);
}//end for
numbers[0] has 101
numbers[1] has 102
numbers[2] has 103
numbers[3] has 104
numbers[4] has 105
numbers[5] has 106
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
numbers[0] has 101
numbers[1] has 102
numbers[2] has 103
numbers[3] has 104
numbers[4] has 105
numbers[5] has 106
int numbers[];
numbers = new int[6];
String str1 = "\nnumbers[%d] has %d";
int value = 100;
for (int index = 0; index < 6; index++)
{
numbers[index] = ++value;
}//end for
for (int index = 0; index < 6; index++)
{
System.out.printf(str1, index, numbers[index]);
}//end for
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
double [] nos = {101.011, 102.016, 103.026, 104.037, 105.048};
for (int index = 0; index < 5; index++)
{
System.out.printf("\nnos[%d] has %.2f", index, nos[index]);
}//end for
nos[0] has 101.01
nos[1] has 102.02
nos[2] has 103.03
nos[3] has 104.04
nos[4] has 105.05
Round off
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-34
Alternate Array Declaration
• Previously we showed arrays being declared:int[] numbers;
– However, the brackets can also go here:
int numbers[];
– These are equivalent but the first style is typical.
• Multiple arrays can be declared on the same line.int[] numbers, codes, scores;
• With the alternate notation each variable must have brackets.int numbers[], codes[], scores;
– The scores variable in this instance is simply an int variable.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-35
Processing Array Contents
• Array elements can be used in relational operations:
if(cost[20] < cost[0])
{
//statements
}
• They can be used as loop conditions:
while(value[count] != 0)
{
//statements
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_02ArrayDemos;
public class Chap07_02ArrayDemos {
public static void main(String[] args) {
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
int count = 0;
while (iD[count] != 0)
{
System.out.printf("\niD[ %d ] is %d.", count, iD[count]);
count ++;
}
System.out.println("\nTotal number of iD is " + count);
System.out.println("Total array size of iD is " + iD.length);
}//end of main
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
iD[ 0 ] is 1011.
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
Total number of iD is 4
Total array size of iD is 10
Output of the program is:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-38
Processing Array Contents
• Processing data in an array is the same as any other variable.
grossPay = hours[3] * payRate;
• Pre and post increment works the same for the content of array
score[i]:
int[] score = {7, 8, 3, 10, 11};
++score[2]; // Pre-increment operation
score[4]++; // Post-increment operation
• See example: PayArray.java
• System.out.println(++score[2] + “ ” + score[2]);
• System.out.println(score[4]++ + “ ” + score[4]);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] score = {7, 8, 9, 10, 11};System.out.printf("score[2] is %d, and then %d " +
"and then %d.\n" ,score[2], ++score[2], score[2]);
System.out.printf("score[4] is %d, and then %d, " + "and then %d." , score[4], score[4]++, score[4]);
score[2] is 9, and then 10 and then 10.score[4] is 11, and then 11, and then 12.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
int count = -1;
while (iD[++count] != 0)
{
System.out.printf("\niD[ %d ] is %d.", count, iD[count]);
}
System.out.println("\nTotal number of iD is " + count);
System.out.println("Total array size of iD is " + iD.length);
Can it be used for indexing an array? Yes, but be careful!
iD[ 0 ] is 1011.
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
Total number of iD is 4
Total array size of iD is 10
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
int count = 0;
while (iD[count++] != 0)
{
System.out.printf("\niD[ %d ] is %d.", count, iD[count]);
}
System.out.println("\nTotal number of iD is " + (count));
System.out.println("Total array size of iD is " + iD.length);
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
iD[ 4 ] is 0.
Total number of iD is 5
Total array size of iD is 10
Can it be used for indexing an array? Yes, but be careful!
Here is a problem!!!!
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int count = 0;while (iD[count] != 0){ System.out.printf("\niD[ %d ] is %d.", count, iD[count++]);
}//end of whileSystem.out.println("\nTotal number of iD is " + count);System.out.println("Total array size of iD is " + iD.length);
iD[ 0 ] is 1011.iD[ 1 ] is 1012.iD[ 2 ] is 1013.iD[ 3 ] is 1015.Total number of iD is 4Total array size of iD is 10
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};int count = 0;while (iD[count] != 0){ System.out.printf("\niD[ %d ] is %d.", count, ++iD[count++]);
}//end of whileSystem.out.println("\nTotal number of iD is " + count);System.out.println("Total array size of iD is " + iD.length);
iD[ 0 ] is 1012.iD[ 1 ] is 1013.iD[ 2 ] is 1014.iD[ 3 ] is 1016.Total number of iD is 4Total array size of iD is 10
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
I an’t do it!
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
int count = 0;
while (iD[count++] != 0)
{
System.out.printf("\niD[ %d ] is %d.", count-1, iD[count-1]);
}
System.out.println("\nTotal number of iD is " + (count-1));
System.out.println("Total array size of iD is " + iD.length);
Can it be used for indexing an array? Yes, but be careful!
A correction
iD[ 0 ] is 1011.
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
Total number of iD is 4
Total array size of iD is 10
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-46
The Enhanced for Loop
• Simplified array processing (read only)
• Always goes through all elements
• General format:
for(datatype elementVariable : array)
statement;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-47
The Enhanced for Loop
Example:
//create an object array with the variable numbers as
// reference to
int[] numbers = {3, 6, 9};
for(int val : numbers)
{
System.out.println("The next value is " +
val);
} for (int i = 0; i < 3; i++)
{
System.out.println("The next value is "
+ numbers[i]);
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-48
The Enhanced for Loop
Example:
int[] numbers = {3, 6, 9};
for(int numbersContents : numbers)
{
System.out.println("The next value is " +
numbersContents);
}
Output;
The next value is 3
The next value is 6
The next value is 9
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-49
Array Length
• Arrays are objects and provide a public field named length
that is a constant that can be tested.
double[] temperatures = new double[25];
The length of this array is 25.
• The length of an array can be obtained via its length constant.
int size = temperatures.length;
The variable size will contain 25.
• Cannot change the value of an array’s length field.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-50
Array Size
• The length constant can be used in a loop
to provide automatic bounding.
for(int i = 0; i < temperatures.length; i++)
{
System.out.println("Temperature " + i ": "
+ temperatures[i]);
}
Index subscripts start at 0 and end at one less than the
array length.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-51
Array Size
• You can let the user specify the size of an array:
int numTests;
int[] tests;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many tests do you have?");
numTests = keyboard.nextInt();
tests = new int[numTests];
• See example: DisplayTestScores.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
import java.util.Scanner;
public class arrayLecture07 {public static void main(String[] args) {
int numTests;int[] tests;Scanner keyboard = new Scanner(System.in);System.out.print("How many tests do you have?");numTests = keyboard.nextInt();tests = new int[numTests];
System.out.print("tests array's length is " + tests.length + "\n");
for (int index=0; index < tests.length; index++) {System.out.print(tests[index] + " "); }
}} How many tests do you have?8
tests array's length is 80 0 0 0 0 0 0 0
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-53
Reassigning Array References
• An array reference can be assigned to another array of
the same type.
// Create an array referenced by the numbers
// variable.
int[] numbers = new int[10];
// Reassign numbers to a new array.
numbers = new int[5];
• If the first (10 element) array no longer has a reference
to it, it will be garbage collected.
numbers
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-54
Reassigning Array References
• An array reference can be assigned to another array of
the same type.
// Create an array referenced by the numbers
// variable.
int[] numbers = new int[10];
int []numbersc = numbers; //a reference copy
// Reassign numbers to a new array.
numbers = new int[5];
• If the first (10 element) array no longer has a reference
to it, it will be garbage collected.
numbers
numbersc
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
import java.util.Scanner;
public class arrayLecture07 {
public static void main(String[] args) {
int numTests;
double [] tests;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many tests do you have?");
numTests = keyboard.nextInt();
tests = new double[numTests];
System.out.print("tests array's length is " + tests.length + "\n");
for (int index=0; index < tests.length; index++) {
System.out.print("Enter the " + index + " score:");
tests[index] = keyboard.nextDouble(); }
for (int index=0; index < tests.length; index++) {
System.out.print(tests[index] + " "); }
//continue to the next slide
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
tests = new double[5];
System.out.print("\ntests array's length is " + tests.length + "\n");
for (int index=0; index < tests.length; index++) {
System.out.print("Enter the " + index + " score:");
tests[index] = keyboard.nextDouble(); }
for (int index=0; index < tests.length; index++) {
System.out.print(tests[index] + " "); }
} //end of main
} How many tests do you have?3
tests array's length is 3
Enter the 0 score:100
Enter the 1 score:101
Enter the 2 score:99
100.0 101.0 99.0
tests array's length is 5
Enter the 0 score:95.01
Enter the 1 score:95.02
Enter the 2 score:95.03
Enter the 3 score:95.04
Enter the 4 score:95.05
95.01 95.02 95.03 95.04 95.05
100.0 101.0 99.0
95.01 95.02 95.03 95.04 99.05
test
Before the end of execution of the
second for loop.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-57
Reassigning Array References
Address
The numbers variable
holds the address of an
int array.
int[] numbers = new int[10];
numbers
numbers[1]numbers[9]numbers[0]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-58
Reassigning Array References
AddressThe numbers variable
holds the address of anint array.
numbers = new int[5];
This array gets marked for
garbage collection
int[] numbers = new int[10];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-59
Copying Arrays
• This is not the way to copy an array.int[] array1 = { 2, 4, 6, 8, 10 };
int[] array2 = array1; // This does not copy array1.
// a reference copy.
• 2
Addressarray1 holds an
address to the array
Addressarray2 holds an
address to the array
4 6 8 10
Example:
SameArray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-60
Copying Arrays
• This is not the way to copy an array.int[] array1 = { 2, 4, 6, 8, 10 };
int[] array2 = array1; // This does not copy array1.
2
Addressarray1 holds an
address to the array
Addressarray2 holds an
address to the array
4 6 8 10
Example: SameArray.java
array1
array2
// This statement is to set array2 to reference the same array.
int [ ] array1 = new int[5];
Or
int [ ] array1;
array1 = new int[5];
This type of assignment operation
is called a reference copy.
Namely, only the address of the
array object is copied, not the
contents of the array object.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_ArrayDemos01;
public class Chap07_ArrayDemos01 {public static void main(String[] args) {
int[] array1 = { 2, 4, 6, 8, 10 };int[] array2 = array1; //reference copySystem.out.print("The array1 has ");for (int ix = 0; ix < 5; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of forSystem.out.print("The array2 has ");for (int ix = 0; ix < 5; ix++) {
array2[ix] = array2[ix] + ix;if (ix < 4)System.out.print(array2[ix] + ", " );elseSystem.out.println(array2[ix] + ". " );
}//end of for//Prove "int[] array2 = array1;" is reference copy! System.out.print("The array1 has ");for (int ix = 0; ix < 5; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );elseSystem.out.println(array1[ix] + ". " );
}//end of for}//end of main
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The array1 has 2, 4, 6, 8, 10. The array2 has 2, 5, 8, 11, 14. The array1 has 2, 5, 8, 11, 14.
The output of the program:
These output data shows that int[] array2 = array1; is a reference copy, but not copy an array1 to another array2.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_ArrayDemos01;
public class Chap07_ArrayDemos01 {public static void main(String[] args) {
int[] array1 = { 2, 4, 6, 8, 10 };int[] array2 = new int[5]; //create an array object referenced by array2.System.out.print("The array1 has ");for (int ix = 0; ix < 5; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of forSystem.out.print("The array2 has ");for (int ix = 0; ix < 5; ix++) {
if (ix < 4)System.out.print(array2[ix] + ", " );
elseSystem.out.println(array2[ix] + ". " );
}//end of for//Prove "int[] array2 and int array1;" are two different arrays.System.out.print("The array1 has ");for (int ix = 0; ix < 5; ix++){
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of for}//end of main
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The array1 has 2, 4, 6, 8, 10.
The array2 has 0, 0, 0, 0, 0.
The array1 has 2, 4, 6, 8, 10.
The output of the program:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-65
Copying Arrays• You cannot copy an array by merely assigning one
reference variable to another.
• You need to copy the individual elements of one array to another.
int[] firstArray = {5, 10, 15, 20, 25 };
int[] secondArray = new int[5];
for (int i = 0; i < firstArray.length; i++)
secondArray[i] = firstArray[i];
• This code copies each element of firstArray to the corresponding element of secondArray.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-66
Copying Arrays
• You cannot copy an array by merely assigning one reference variable to another. (secondArray = firstArray; Wrong!)
• You need to copy the individual elements of one array to another.
int[] firstArray = {5, 10, 15, 20, 25 };
int[] secondArray = new int[5];
for (int i = 0; i < firstArray.length; i++)
{secondArray[i] = firstArray[i];}
• This code copies each element of firstArray to the corresponding element of secondArray.
5 10 15 20 25
5 10 15 20 25
address
secondArray
firstArray
address
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_ArrayDemos01;
public class Chap07_ArrayDemos01 {public static void main(String[] args) {
int[] array1 = { 2, 4, 6, 8, 10 };int[] array2 = new int[5]; //an object referenced by array2.System.out.print("The array1 has ");//reverse copy the contents of array1 to array2.int array2SIZE = array2.length;for (int ix = 0; ix < array1.length; ix++){ //reverse-copy the array1 into array2
array2[array2SIZE-1 - ix] = array1[ix];}for (int ix = 0; ix < array1.length; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );}//end of for
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
System.out.print("The array2 has ");for (int ix = 0; ix < array2.length; ix++) {
if (ix < 4)System.out.print(array2[ix] + ", " );
elseSystem.out.println(array2[ix] + ". " );
}//end of for//Prove that int[] array1 remains as it is. System.out.print("The array1 has ");for (int ix = 0; ix < array1.length; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of for}//end of main
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The array1 has 2, 4, 6, 8, 10. The array2 has 10, 8, 6, 4, 2. The array1 has 2, 4, 6, 8, 10.
The output of the program:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-70
Passing Array Elements to a Method
• When a single element of an array is passed to a
method it is handled like any other variable.
• See example: PassElements.java
• More often you will want to write methods to process
array data by passing the entire array, not just one
element at a time.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-71
Passing Arrays as Arguments
• Arrays are objects.
• Their references can be passed to methods like any
other object reference variable.
5 10 15 20 25
Address
showArray(numbers);30 35 40
public static void showArray(int[] array){
for (int i = 0; i < array.length; i++)System.out.print(array[i] + " ");
}
Example: PassArray.java
int [] numbers = {5, 10, 15, 20, 25, 30, 35, 40};
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_ArrayDemos01;
public class Chap07_ArrayDemos01 {public static void main(String[] args) {
int[] array1 = { 2, 4, 6, 8, 10 };int[] array2 = new int[10]; //an object referenced by array2.System.out.print("The array1 has ");//copy the contents of array1 to larger array2.int array2Size = array2.length;int array1Size = array1.length;for (int ix = 0; ix < array1Size; ix++){ //reverse-copy the array1 into larger array2
int ir = array1Size-1 - ix;array2[ix] = array1[ir];
}//end of forfor (int ix = 0; ix < array1Size; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of for
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
System.out.print("The array2 has ");for (int ix = 0; ix < array2Size; ix++) {
if (ix < array2Size-1)System.out.print(array2[ix] + ", " );
elseSystem.out.println(array2[ix] + ". " );
}//end of for//Prove that int[] array1 remains as it is. System.out.print("The array1 has ");for (int ix = 0; ix < array1Size; ix++) {
if (ix < 4)System.out.print(array1[ix] + ", " );
elseSystem.out.println(array1[ix] + ". " );
}//end of for
String str1 = "The array1 has ";String str2 = "\nThe array2 has ";showArray(str1, array1);showArray(str2, array2);
}//end of main
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
//}end of mainpublic static void showArray(String str, int[] array){
System.out.println("\n" + str);for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");}//end of for
}//end of showArray
}//end of class
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The array1 has 2, 4, 6, 8, 10.
The array2 has 10, 8, 6, 4, 2, 0, 0, 0, 0, 0.
The array1 has 2, 4, 6, 8, 10.
The array1 has
2 4 6 8 10
The array2 has
10 8 6 4 2 0 0 0 0 0
The output of the program:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-76
Passing Array Elements to a Method
• When a single element of an array is passed to a method it is
handled like any other variable.
public class PassElements{
public static void main(String[ ] args){
int [] nos = {5, 10, 15, 20, 25};
for(int i = 0; i < nos.length; i++) {
displayElement(nos[i]); } //end for
} //end main
public static void displayElement(int content){
System.out.print(content + “, ”);}//end displayElement
} content
The program output is 5, 10, 15, 20, 25,
5 10 15 20 25
25
nos
nos[4]
address
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-77
Passing Array Elements to a Method
• When a single element of an array is passed to a method it is
handled like any other variable.
int [] nos = {5, 10, 15, 20, 25};
int i = 0;
displayElement(nos[i], nos[i+1], nos[i+2], nos[i+3], nos[i+4]);
// displayElement(nos[0], nos[1], nos[2], nos[3], nos[4]);
public static void displayElement(int c0, int c1, int c2, intc3, int c4){
System.out.print(c0 + “, ” + c1 + “, ” + c2 + “, ” + c3 + “, ” + c4 +
“, ” );}//end displayElement. An awkward way!
The program output is 5, 10, 15, 20, 25,
5 10 15 20 25
5
c0
10c1
address
nos
nos[0] nos[1]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public class PassElements{
public static void main(String[ ] args){
int [] nos = {5, 10, 15, 20, 25};
int i = 0;
displayElement(nos[i], nos[i+1], nos[i+2], nos[i+3], nos[i+4]);
// displayElement(nos[0], nos[1], nos[2], nos[3], nos[4]);
} //end main
public static void displayElement(int c0, int c1, int c2, intc3, int c4){
System.out.print(c0 + “, ” + c1 + “, ” + c2 + “, ” + c3 + “, ” +
c4 + “, ” );
}//end displayElement. An awkward way!
}
The output is: 5, 10, 15, 20, 25
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-79
Passing Array as Arguments to a Method
• More often you will want to write methods to process array data
by passing the entire array, not just one element at a time.
• When pass an array as an argument, it simply pass the value in
the variable that reference the array, as shown below
public static void main(String[ ] args){
int [] numbers = {5, 10, 15, 20, 25, 30, 35, 40};
showArray(numbers);
…
}
public static void showArray(int[] array) {
… }
• ..
5 10 15 20 25 30 35 40
address
array
number
address A reference copy!
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-80
Passing Arrays as Arguments
• Arrays are objects.
• Their references can be passed to methods like any
other object reference variable.
5 10 15 20 25
Address
showArray(numbers); 30 35 40
public static void showArray(int[] array)
{
for (int i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
} Example: PassArray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public class PassArrayReferenceVariable{
public static void main(String[ ] args){
int [] numbers = {5, 10, 15, 20, 25, 30, 35, 40};
showArray(numbers);
} //end main
public static void showArray(int [] arrayContents) {
System.out.print(arrayContents);
System.out.print("\n");
for(int i = 0; i < arrayContents.length; i++)
System.out.print(arrayContents[i] + " ");;
} //end of showArray}}
The output is:
[I@15db9742
5 10 15 20 25 30 35 40
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_02ArrayDemos;
public class Chap07_02ArrayDemos {
public static void main(String[] args) {
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
displayArray(iD);
}//end of main
public static void displayArray(int [] queue) {
int count = 0;
while (queue[count] != 0)
{
System.out.printf("\niD[ %d ] is %d.", count, queue[count]);
count ++;
}
System.out.println("\nTotal number of iD is " + (count));
System.out.println("Total array size of iD is " + queue.length);
System.out.println("iD has the address of the array" + queue);
}//end of displayArray
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The output is:
iD[ 0 ] is 1011.
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
Total number of iD is 4
Total array size of iD is 10
iD has the address of the array[I@15db9742
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The following main method:
displayArray(iD, striD, striD1);
copyArray(iD, iDCopied);
public static void displayArray(int [] queue, String str, String str0) {
}
public static void copyArray(int[] queue, int[] queue2) {
displayArray(queue2, str2, str3);
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_02ArrayDemos;
public class Chap07_02ArrayDemos {
public static void main(String[] args) {
int [] iD = {1011, 1012, 1013, 1015, 0, 0, 0, 0, 0, 0};
int [] iDCopied = new int [15];
String striD = "\niD[ %d ] is %d.";
String striD1 = "iD";
displayArray(iD, striD, striD1);
copyArray(iD, iDCopied);
}//end of main
public static void displayArray(int [] queue, String str, String str0) {
int count = 0;
for(; count < queue.length; count++)
{
System.out.printf(str, count, queue[count]);
}
System.out.println("\nTotal number of " + str0 + " is " + (count));
System.out.println("Total array size of " + str0 + " is " + queue.length);
System.out.println(str0 + " has the address of the array" + queue);
}//end of displayArray
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public static void copyArray(int[] queue, int[] queue2) {
int count = 0;
while (queue[count] != 0)
{
queue2[count] = queue[count];
count ++;
}
String str2 = "\niDCopied[ %d ] is %d.";
String str3 = "iDCopied";
displayArray(queue2, str2, str3);
}//end of copyArray
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The output is:
iD[ 0 ] is 1011.
iD[ 1 ] is 1012.
iD[ 2 ] is 1013.
iD[ 3 ] is 1015.
iD[ 4 ] is 0.
iD[ 5 ] is 0.
iD[ 6 ] is 0.
iD[ 7 ] is 0.
iD[ 8 ] is 0.
iD[ 9 ] is 0.
Total number of iD is 10
Total array size of iD is 10
iD has the address of the array[I@15db9742
iDCopied[ 0 ] is 1011.
iDCopied[ 1 ] is 1012.
iDCopied[ 2 ] is 1013.
iDCopied[ 3 ] is 1015.
iDCopied[ 4 ] is 0.
iDCopied[ 5 ] is 0.
iDCopied[ 6 ] is 0.
iDCopied[ 7 ] is 0.
iDCopied[ 8 ] is 0.
iDCopied[ 9 ] is 0.
iDCopied[ 10 ] is 0.
iDCopied[ 11 ] is 0.
iDCopied[ 12 ] is 0.
iDCopied[ 13 ] is 0.
iDCopied[ 14 ] is 0.
Total number of iDCopied is 15
Total array size of iDCopied is 15
iDCopied has the address of the
array[I@6d06d69c
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
iDCopied[ 0 ] is 1011.
iDCopied[ 1 ] is 1012.
iDCopied[ 2 ] is 1013.
iDCopied[ 3 ] is 1015.
iDCopied[ 4 ] is 0.
iDCopied[ 5 ] is 0.
iDCopied[ 6 ] is 0.
iDCopied[ 7 ] is 0.
iDCopied[ 8 ] is 0.
iDCopied[ 9 ] is 0.
iDCopied[ 10 ] is 0.
iDCopied[ 11 ] is 0.
iDCopied[ 12 ] is 0.
iDCopied[ 13 ] is 0.
iDCopied[ 14 ] is 0.
Total number of iDCopied is 15
Total array size of iDCopied is 15
iDCopied has the address of the array[I@6d06d69c
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-89
Comparing Arrays
• The == operator determines only whether array references point to the same array object.
int[] firstArray = { 5, 10, 15, 20, 25 };
int[] secondArray = { 5, 10, 15, 20, 25 };
if (firstArray == secondArray) //This is a mistake.
System.out.println("The arrays are the same.");
else
System.out.println("The arrays are not the same.");
The program output is
The arrays are not the same. ……………. Why?
5 10 15 20 25
5 10 15 20 25
firstArray
secondArray
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Comparing Arrays: Example
7-90
int[] firstArray = { 2, 4, 6, 8, 10 };
int[] secondArray = { 2, 4, 6, 8, 10 };
boolean arraysEqual = true;int i = 0;
// First determine whether the arrays are the same size.if (firstArray.length != secondArray.length)
{ arraysEqual = false;}
// Next determine whether the elements contain the same data.while (arraysEqual && i < firstArray.length)
{
if (firstArray[i] != secondArray[i])
{ arraysEqual = false; }
i++;}
if (arraysEqual)
System.out.println("The arrays are equal.");
else
System.out.println("The arrays are not equal.");
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-91
Useful Array Operations
• Finding the Highest Valueint [] numbers = new int[50];
int highest = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] > highest)
highest = numbers[i];
}
• Finding the Lowest Valueint lowest = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] < lowest)
lowest = numbers[i];
}
By default
numbers[0] = 0
numbers[1] = 0
…
numbers[49] = 0
highest and
lowest have
values which are
0.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public class HighestLowestValues{
public static void main(String[ ] args){
final int ARRAY_SIZE = 15;
int [] numbers01 = new int[ARRAY_SIZE ];
getValues(numbers01);
int highest = numbers01[0];
for (int index = 1; index < numbers01.length; index++)
{
if (numbers01[index] > highest)
highest = numbers01[index];
}
System.out.println("\nThe highest numbers is " + highest);
int lowest = numbers01[0];
for (int index = 1; index < numbers01.length; index++)
{
if (numbers01[index] < lowest)
lowest = numbers01[index];
}
System.out.println("The lowest numbers is " + lowest);
}//end of main
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public static void getValues(int [] arrayNumbers){
Random randomNumbers = new Random();
for(int i = 0; i < arrayNumbers.length; i++){
arrayNumbers[i] = randomNumbers.nextInt(100)+1;
System.out.print(arrayNumbers[i] + " ");
}
}
}//end of class HighestLowestValues
The output is:
79 77 56 3 3 96 18 18 25 98 63 93 69 30 36
The highest numbers is 98
The lowest numbers is 3
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-94
Useful Array Operations
• Summing Array Elements:
int total = 0; // Initialize accumulator
for (int i = 0; i < units.length; i++)
total += units[i];
• Averaging Array Elements:
double total = 0; // Initialize accumulator
double average; // Will hold the average
for (int i = 0; i < scores.length; i++)
{total += scores[i];}//end for_loop
average = total / scores.length;
• Example: SalesData.java, Sales.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ArrayClass_7_HiLowPK;
import java.util.Random;
public class HighestLowestValues {
public static void main(String[] args) {final int ARRAY_SIZE = 15;int[] numbers01 = new int[ARRAY_SIZE];getValues(numbers01);int highest = numbers01[0];for (int index = 1; index < numbers01.length;
index++) {if (numbers01[index] > highest)
highest = numbers01[index];}System.out.println("\nThe highest numbers is "
+ highest);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
int lowest = numbers01[0];for (int index = 1; index < numbers01.length;
index++) {if (numbers01[index] < lowest)
lowest = numbers01[index];}System.out.println("The lowest numbers is "
+ lowest);
int total = findTotal(numbers01);System.out.printf("The total of the array" +
"numbers01 is %d" +"\nThe average is %.4f", total, (double)total/ARRAY_SIZE);
}// end of main
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public static void getValues(int[] arrayNumbers) {Random randomNumbers = new Random();
for (int i = 0; i < arrayNumbers.length; i++) {arrayNumbers[i] = randomNumbers.nextInt(100)+1;System.out.print(arrayNumbers[i] + " ");
}}// end of getValues
public static int findTotal(int [] numbers) {int sum = 0;for (int i = 0; i < numbers.length; i++){
sum += numbers[i];}return sum;
} //end of findTotal}// end of class HighestLowestValues
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-98
Partially Filled Arrays
• Typically, if the amount of data that an array must hold is unknown:
– size the array to the largest expected number of elements.
– use a counting variable to keep track of how much valid data is in the array.
…
int[] array = new int[100];
int count = 0;
int number;
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a number or -1 to quit: ");
number = keyboard.nextInt();
while (number != -1 && count <= 99)
{
array[count] = number;
count++;
System.out.print("Enter a number or -1 to quit: ");
number = keyboard.nextInt();
}
…
input, number and keyboard were
previously declared and keyboard
references a Scanner object
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
System.out.println("\n");int[] array = new int[12];int count = 0;int number;Scanner keyboard = new Scanner(System.in);System.out.print("Enter a number or -1 to quit: ");number = keyboard.nextInt();while (number != -1 && count <= 11)
{array[count] = number;count++;System.out.print("Enter a number or -1 to quit: ");number = keyboard.nextInt();
}for (int i = 0; i < array.length; i++){System.out.print(array[i] + ", ");}System.out.println("End of array of size 12!");
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Enter a number or -1 to quit: 6Enter a number or -1 to quit: 5Enter a number or -1 to quit: 4Enter a number or -1 to quit: 3Enter a number or -1 to quit: 2Enter a number or -1 to quit: 1Enter a number or -1 to quit: -16, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, End of array of size 12!
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-101
Arrays and Files
• Saving the contents of an array to a file:
int[] numbers = {10, 20, 30, 40, 50};
FileWriter fwriter = new
FileWriter(“Values.txt”, true);//Apend data to the file
PrintWriter outputFile =
new PrintWriter(fwriter);
PrintWriter outputFile =
new PrintWriter ("Values.txt"); //open the file
//Write the array elements to the file
for (int i = 0; i < numbers.length; i++)
{outputFile.println(numbers[i]+ “\r”);}
outputFile.close();
10 20 30 40 50numbers
10
20
30
40
50
Values
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-102
Arrays and Files
• Reading the contents of a file into an array:
final int SIZE = 5; // Assuming we know the size.
int[] numbers = new int[SIZE];
int i = 0;
File file = new File("Values.txt"); //open the file
Scanner inputFile = new Scanner(file);
while (inputFile.hasNext() && i < numbers.length)
{
numbers[i] = inputFile.nextInt();
i++;
}
inputFile.close();
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_;import java.io.*;import java.util.Scanner;
public class chap07_ArrayOutputFile {
public static void main(String[] args) throws IOException {Int[] numbers = {10, 20, 30, 40, 50, 60};FileWriter fwriter =
new FileWriter("Numbers.txt", true);PrintWriter outputFile =
new PrintWriter(fwriter);for (int ix = 0; ix < numbers.length; ix++){
outputFile.println(numbers[ix] + "\r");System.out.println(numbers[ix]);
}outputFile.close();
//open the file File file = new File("Numbers.txt"); Scanner inputFile = new Scanner(file);while (inputFile.hasNext()){
int numbersi = inputFile.nextInt();System.out.println(numbersi);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_;import java.io.*;import java.util.Scanner;
public class chap07_ArrayOutputFile {public static void main(String[] args) throws
IOException {int[] numbers = {10, 20, 30, 40, 50, 60};FileWriter fwriter =
new FileWriter("Numbers.txt", true);PrintWriter outputFile =
new PrintWriter(fwriter);for (int ix = 0; ix < numbers.length; ix++){
outputFile.println(numbers[ix] + "\r");System.out.println(numbers[ix]);
}outputFile.close();
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
//open the fileFile file = new File("Numbers.txt"); Scanner inputFile = new Scanner(file);while (inputFile.hasNext()){
int numbersi = inputFile.nextInt();System.out.println(numbersi);
}inputFile.close();
}//end of mail}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-106
Returning an Array Reference from Methods
• A method can return a reference to an array.
• The return type of the method must be declared as an array of
the right type.
public static double[] getArray()
{
double[] array = { 1.2, 2.3, 4.5, 6.7, 8.9 };
return array; //return a reference to the array
}
• The getArray method is a public static method that returns an
array of doubles.
• See example: ReturnArray.java
This method is returning a reference to the array of double type
1.2 2.3 4.5 6.7 8.9addressarray
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-107
Returning an Array Reference from Methods
public class ReturnArray{
public static void main(String[] args){
double [] values;
values = getArray();
for(double num: values)
System.out.print(num + “ ”);
}//end main
public static double[] getArray()
{
double[] array = { 1.2, 2.3, 4.5, 6.7, 8.9 };
return array;
}//end of getArray
}
•See example: ReturnArray.java
1.2 2.3 4.5 6.7 8.9addressarray
address
values
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ArrayClass_7_GReferencePK;
public class ReturnArrayReference {public static void main(String[] args) {
double[] arrayRef = getArray();for (int i = 0; i < arrayRef.length; i++) {
System.out.print(arrayRef[i] + " ");}
}// end of main
public static double[] getArray() {double[] array = { 1.2, 2.3, 4.5, 6.7, 8.9 };return array; // return a reference to the array
} // end of getArray;
} // end of class ReturnArrayReference
The output is: 1.2 2.3 4.5 6.7 8.9
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-110
String Arrays
• Arrays are not limited to primitive data.
• An array of String objects can be created:
String[] names = { "Bill", "Susan", "Steven", "Jean" };
The names variable holds
the address to the array. A String array is an array
of references to String objects.Address
names[1]
names[0]
names[3]
names[2]
Example: MonthDays.java
“Bill”
“Susan”
“Steven”
“Jean”
address
address
address
address
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-111
String Arrays
• If an initialization list is not provided, the new keyword must be
used to create the array:
final int SIZE = 4;
String[] names = new String[SIZE];
The names variable holds
the address to the array.
Address
names[1]
names[0]
names[3]
names[2]
A String array is an array
of references to String objects.
null
null
null
null
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-112
String Arrays
• When an array is created in this manner, each element of the
array must be initialized.
The names variable holds
the address to the array.
Address
names[1]
names[0]
names[3]
names[2]
“Bill”
“Susan”
“Steven”
“Jean”
address
address
address
address
names[0] = "Bill";
names[1] = "Susan";
names[2] = "Steven";
names[3] = "Jean";
After these statements
execute, each elements
of the name array will
reference a String
object.
A String array is an array
of references to String objects.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package ch07_arrayDemos_06;
public class Ch07_ArrayDemos06 {
public static void main(String[] args) {String name = new String(“Tu Nguyen");System.out.printf("My name is %s\n", name);final int SIZE = 5;String [] names = new String[SIZE];names[0] = “Brianna";names[1] = "Eric Thompson";names[2] = null;names[3] = "Hanna E. Kennedy";
for (int i = 0; i < SIZE; i++) {System.out.printf("The names[ %d ] has %s\n", i, names[i]);
}
}//end of main}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The output is:
My name is Tu Nguyen.
The names[ 0 ] has Brianna.
The names[ 1 ] has Eric Thompson
The names[ 2 ] has null
The names[ 3 ] has Hanna E. Kennedy
The names[ 4 ] has null This null is defined by default
This null is given by the user.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-115
Calling String Methods On Array Elements
• String objects have several methods, including:– toUpperCase
– compareTo
– equals
– charAt
• Each element of a String array is a String object.
• Methods can be used by using the array name and index as before.
System.out.println(names[0].toUpperCase());
char letter = names[3].charAt(0);
if (names[1].compareTo(names[2]) == 0)… ;
//compareTo returns integer
if (names[i].equals(“John”))… ;//return Boolean value
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
"Susanez".compareTo("SusanezabcBilla") has the integer value -8. //The 1st is 8 character shorter than 2nd string.
"SusanezabcBilla".compareTo("Susanez") has the integer value 8. //The 1st is 8 character longer than the 2nd string.
"SusanezabcBilla".compareTo("Susemen") has the integer value -4. //code(a) – code(e) = -4.
"Susemen".compareTo("SusanezabcBilla") has the integer value 4. //code(e) – code(a) = -4.
"Susemen".compareTo("Susemen") has the integer value 0. //The two strings are the same
if (names[1].compareTo(names[2]) == 0)… ;
//compareTo returns integer
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
if (names[i].equals(“John”))… ;//return Boolean value
"Susanez".equals("SusanezabcBilla") has the boolean value false."SusanezabcBilla".equals("Susanez") has the bolean value false."SusanezabcBilla".equals("Susemen") has the boolean value false."Susemen".equals("SusanezabcBilla") has the bolean value false."Susemen".equals("Susemen") has the boolean value true.names[3].equals("Susemen") has the boolean value true.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-118
The length Field & The length Method
• Arrays have a final field named length.
• String objects have a method named length.
• To display the length of each string held in a String array:
for (int i = 0; i < names.length; i++)
System.out.println(names[i].length());
• An array’s length member is a field
– You do not write a set of parentheses after its name.
• A String’s length is a method
– You do write the parentheses after the name of the String class’s length method.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-119
The length Field & The length() Method
for (int i = 0; i < names.length; i++)
System.out.println(names[i].length());
names.length is 4. And the output names[i].length() are4
5
7
4
The names variable holds
the address to the array.
Address
names[1]
names[0]
names[3]
names[2]
“Bill”
“Susan”
“Steven”
“Jean”
address
address
address
address
names[0] = "Bill";
names[1] = "Susan";
names[2] = "Steven";
names[3] = "Jean";
After these statements
execute, each elements
of the name array will
reference a String
object.
A String array is an array
of references to String objects.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
final int SIZE = 10;String [] names = new String[SIZE];names[0] = "Peterj Ng, Sr.";names[1] = "Peteric Thompson";names[2] = "Hanna J. Kennore";names[3] = "Hanna E. Kennedy";names[4] = "Susanez";names[5] = null;
names[9] = "who are you?";for (int i = 0; i < SIZE; i++) {
System.out.printf("The names[ %d ] has %s\n", i, names[i]);}for (int i = 0; (i < names.length) && names[i]!= null; i++)
System.out.println(names[i].length());int i = 0;
while ((i < names.length))
{ while ( names[i] != null)
{System.out.println(names[i].length());
break;}
i++;
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
The names[ 1 ] has Peteric ThompsonThe names[ 2 ] has Hanna J. Kennore, Jr.The names[ 3 ] has Hanna E. KennedyThe names[ 4 ] has SusanezThe names[ 5 ] has nullThe names[ 6 ] has nullThe names[ 7 ] has nullThe names[ 8 ] has nullThe names[ 9 ] has who are you?14162116714162116712
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-122
Arrays of Objects
• Because Strings are objects, we know that arrays can contain
objects.
• The following creates an array that can reference BankAccount
objects.
BankAccount[] accounts = new BankAccount[5];
The accounts variable holds the address
of an BankAccount array.
Address
null
null
null
null
accounts[1]
accounts[0]
accounts[3]
accounts[2]
nullaccounts[4]
The array is
an array of references to
BankAccount objects.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-123
Arrays of Objects
• Each element needs to be initialized.for (int i = 0; i < accounts.length; i++)
accounts[i] = new BankAccount();• //The BankAccount class has a no-arg constructor that assigns 0.0 to the balance field.
//After the loop executes, each element of the accounts array will reference a //BankAccount.
See example: ObjectArray.java
The accounts variable holds the address
of an BankAccount array.
Address
Address
Address
Address
Address
Address
balance: 0.0
balance:
balance:
balance:
balance:
0.0
0.0
0.0
0.0
accounts[1]
accounts[0]
accounts[3]
accounts[2]
accounts[4]BankAccount objects
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-124
Arrays of Objects• Objects in an array are accessed with subscripts as if other data type in an array.
• The following code uses the accounts[2] element to call the setBalance and withdraw methods.:
accounts[2].setBalance(2500.00);
accounts[2].withdraw(500.00);
accounts[2].getBalance( );
The accounts variable holds the address
of an BankAccount array.
Address
Address
Address
Address
Address
Address
balance: 0.0
balance:
balance:
balance:
balance:
0.0
0.0
0.0
0.0
accounts[1]
accounts[0]
accounts[3]
accounts[2]
accounts[4]BankAccount objects
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package BankingAccountPK;
public class AccountBanking {public static void main(String[] args) {
//create an array that can reference BankAccount objectsBankAccount[] accounts = new BankAccount[5];for (int i = 0; i < accounts.length; i++) {
System.out.println("Content of accounts[" +i + "] is " + accounts[i]);
}
for (int i = 0; i < accounts.length; i++)accounts[i] = new BankAccount();
for (int i = 0; i < accounts.length; i++){System.out.println("accounts[" +
i + "] has balance of " + accounts[i].getBalance());
}//to be continued
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
accounts[1].deposit(2500.00);accounts[4].deposit(7500.00);for (int i = 0; i < accounts.length; i++){
System.out.println("accounts[" +i + "] has balance of " + accounts[i].getBalance());
}
accounts[4].deposit(2500.00);double cashout = accounts[4].withdraw(3000.00);System.out.println("Cashout amount is " + cashout +
"\nYour account new balance is " +accounts[4].getBalance());
}//end of main}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package BankingAccountPK;
public class BankAccount {private double balance;
public BankAccount() {balance = 0.0;
}
public BankAccount(double initialAmt) {balance = initialAmt;
}
public double getBalance() {return balance;
}
//to be continued
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
public double withdraw(double withdrawAmt) {if (balance < withdrawAmt){ double currentBalance = balance;
balance = balance - currentBalance;//return to client the withdrawAmtreturn currentBalance;
}else {
balance = balance - withdrawAmt;//return to client the withdrawAmtreturn withdrawAmt;
}}
public double deposit(double depositAmt) {balance = balance + depositAmt;return balance;
}}//end of class BankAccount
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Content of accounts[0] is nullContent of accounts[1] is nullContent of accounts[2] is nullContent of accounts[3] is nullContent of accounts[4] is nullaccounts[0] has balance of 0.0accounts[1] has balance of 0.0accounts[2] has balance of 0.0accounts[3] has balance of 0.0accounts[4] has balance of 0.0accounts[0] has balance of 0.0accounts[1] has balance of 2500.0accounts[2] has balance of 0.0accounts[3] has balance of 0.0accounts[4] has balance of 7500.0Cashout amount is 3000.0Your account new balance is 7000.0
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
BankingAccount
src
BankingAccountPK
AccountBanking.java
BankAccount.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-131
The Sequential Search Algorithm
• A search algorithm is a method of locating a specific item in a larger collection of data.
• The sequential search algorithm uses a loop to:
– sequentially step through an array,
– compare each element with the search value, and
– stop when
• the value is found or
• the end of the array is encountered.
• See example: SearchArray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-132
The Sequential Search Algorithm
Algorithm SequentialSearch(A[0 .. n-1], K)
// Searches for a given value in a given array by sequential search
Input: An array A[0 .. n-1] and a search key K
Output: The index of the first element of A that matches K
or -1 if there are no matching elements
i := 0;
while (i < n and A[i] ≠ K) do {
i := i + 1;
}
if i < n return i
else return -1;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-133
The Binary Search Algorithm
•
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-134
Two-Dimensional Arrays
• A two-dimensional array is an array of arrays.
• It can be thought of as having rows and columns.
row 0
column 1 column 2 column 3column 0
row 1
row 2
row 3
Begin
here
11/25
/2018
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-135
• Declaring a two-dimensional array requires two sets of brackets and two size declarators
– The first one is for the number of rows
– The second one is for the number of columns.
double[][] scores = new double[3][4];
• The two sets of brackets in the data type indicate that the scores variable will reference a two-dimensional array.
• Notice that each size declarator is enclosed in its own set of brackets.
Two-Dimensional Arrays
two dimensional array rows columns
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-136
Accessing Two-Dimensional Array Elements
• When processing the data in a two-dimensional array,
each element has two subscripts:
– one for its row and
– another for its column.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-137
Accessing Two-Dimensional Array
Elements
scores[0][3]scores[0][2]scores[0][1]scores[0][0]row 0
column 1 column 2 column 3column 0
row 1
row 2
The scores variable
holds the address of a2D array of doubles.
Address
scores[1][3]scores[1][2]scores[1][1]scores[1][0]
scores[2][3]scores[2][2]scores[2][1]scores[2][0]
double[][] scores = new double[3][4];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-138
Accessing Two-Dimensional Array
Elements
Accessing one of the elements in a two-
dimensional array requires the use of both
subscripts.
scores[2][1] = 95;
0000row 0
column 1 column 2 column 3column 0
row 1
row 2
Address
0000
00950
The scores variable
holds the address of a2D array of doubles.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-139
Accessing Two-Dimensional Array
Elements
• Programs that process two-dimensional arrays can do
so with nested loops.
• To fill the scores array:
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 4; col++)
{
System.out.print("Enter a score: ");
scores[row][col] = keyboard.nextDouble();
}
}
Number of rows, not the
largest subscript
Number of
columns, not the
largest subscript
keyboard references a
Scanner object
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-140
Accessing Two-Dimensional Array
Elements
• To print out the scores array:
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 4; col++)
{
System.out.println(scores[row][col]);
}
}
• See example: CorpSales.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-141
Initializing a Two-Dimensional Array
• Initializing a two-dimensional array requires enclosing each
row’s initialization list in its own set of braces.
int[][] numbers = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
• Java automatically creates the array and fills its elements with
the initialization values.
– row 0 {1, 2, 3}
– row 1 {4, 5, 6}
– row 2 {7, 8, 9}
• Declares an array with three rows and three columns.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-142
Initializing a Two-Dimensional Array
321row 0
column 1 column 2column 0
row 1
row 2
Address
654
987
The numbers variable
holds the address of a2D array of int values.
int[][] numbers = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
produces:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-143
The length Field
• Two-dimensional arrays are arrays of one-dimensional
arrays.
• The length field of the array gives the number of rows
in the array.
• Each row has a length constant tells how many
columns is in that row.
• Each row can have a different number of columns.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-144
The length Field
• To access the length fields of the array:int[][] numbers = { { 1, 2, 3, 4 },
{ 5, 6, 7 },
{ 9, 10, 11, 12 } };
for (int row = 0; row < numbers.length; row++)
{
for (int col = 0; col < numbers[row].length; col++)
System.out.println(numbers[row][col]);
}
• See example: Lengths.java
Number of rows Number of columns in this row.
The array can have variable length rows.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-145
Summing The Elements of a Two-Dimensional Array
int[][] numbers = { { 1, 2, 3, 4 },
{5, 6, 7, 8},
{9, 10, 11, 12} };
int total;
total = 0;
for (int row = 0; row < numbers.length; row++)
{
for (int col = 0; col < numbers[row].length; col++)
total += numbers[row][col];
}
System.out.println("The total is " + total);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-146
Summing The Rows of a Two-Dimensional Array
int[][] numbers = {{ 1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;
for (int row = 0; row < numbers.length; row++)
{
total = 0;
for (int col = 0; col < numbers[row].length; col++)
total += numbers[row][col];
System.out.println("Total of row "
+ row + " is " + total);
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-147
Summing The Columns of a Two-Dimensional Array
int[][] numbers = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;
for (int col = 0; col < numbers[0].length; col++)
{
total = 0;
for (int row = 0; row < numbers.length; row++)
total += numbers[row][col];
System.out.println("Total of column "
+ col + " is " + total);
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-148
Passing and Returning Two-Dimensional
Array References
• There is no difference between passing a single or
two-dimensional array as an argument to a method.
• The method must accept a two-dimensional array
as a parameter.
• See example: Pass2Darray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-149
Ragged Arrays• When the rows of a two-dimensional array are of different
lengths, the array is known as a ragged array.
• You can create a ragged array by creating a two-dimensional array with a specific number of rows, but no columns.
int [][] ragged = new int [4][];
• Then create the individual rows.
ragged[0] = new int [3];
ragged[1] = new int [4];
ragged[2] = new int [5];
ragged[3] = new int [6];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-150
More Than Two Dimensions
• Java does not limit the number of dimensions that an array may
be.
• More than three dimensions is hard to visualize, but can be
useful in some programming problems.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-151
Selection Sort
• In a selection sort:
– The smallest value in the array is located and moved to
element 0.
– Then the next smallest value is located and moved to
element 1.
– This process continues until all of the elements have been
placed in their proper order.
– See example: SelectionSortDemo.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-152
Binary Search• A binary search:
– requires an array sorted in ascending order.
– starts with the element in the middle of the array.
– If that element is the desired value, the search is over.
– Otherwise, the value in the middle element is either greater or less than the desired value
– If it is greater than the desired value, search in the first half of the array.
– Otherwise, search the last half of the array.
– Repeat as needed while adjusting start and end points of the search.
• See example: BinarySearchDemo.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-153
Command-Line Arguments
• A Java program can receive arguments from the operating
system command-line.
• The main method has a header that looks like this:
public static void main(String[] args)
• The main method receives a String array as a parameter.
• The array that is passed into the args parameter comes from
the operating system command-line.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-154
Command-Line Arguments
• To run the example:
java CommandLine How does this work?
args[0] is assigned "How"
args[0] is assigned "does"
args[0] is assigned "this"
args[0] is assigned "work?"
• Example: CommandLine.java
• It is not required that the name of main’s
parameter array be args.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-155
Variable-Length Argument Lists
• Special type parameter – vararg…– Vararg parameters are actually arrays
– Examples: VarArgsDemo1.java, VarargsDemo2.java
public static int sum(int... numbers)
{
int total = 0; // Accumulator
// Add all the values in the numbers array.
for (int val : numbers)
total += val;
// Return the total.
return total;
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
package TN.demo;
public class VarargsExample1 {
public static void add(int... values) {
int total = 0;
for (int i = 0; i < values.length; i++) {
total = total + values[i];
}
System.out.println(“Num. of arguments: " + values.length);
System.out.println(“Total = " + total);
}
public static void main(String[] args) {
add();
add(1, 2);
add(1, 2, 3);
add(1, 2, 3, 4);
}
}
Num. of arguments: 0
Total = 0
Num. of arguments : 2
Total = 3
Num. of arguments : 3
Total = 6
Num. of arguments : 4
Total = 10
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-157
The ArrayList Class
• Similar to an array, an ArrayList allows object storage
• Unlike an array, an ArrayList object:
– Automatically expands when a new item is added
– Automatically shrinks when items are removed
• Requires:
import java.util.ArrayList;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Creating an ArrayList
7-158
ArrayList<String> nameList = new ArrayList<String>();
Notice the word String written inside angled
brackets <>
This specifies that the ArrayList can hold String
objects.
If we try to store any other type of object in this ArrayList,
an error will occur.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-159
Using an ArrayList
• To populate the ArrayList, use the add method:– nameList.add("James");
– nameList.add("Catherine");
• To get the current size, call the size method
– nameList.size(); // returns 2
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-160
Using an ArrayList
• To access items in an ArrayList, use the get method
nameList.get(1);
In this statement 1 is the index of the item to get.
• Example: ArrayListDemo1.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-161
Using an ArrayList
• The ArrayList class's toString method returns a string
representing all items in the ArrayList
System.out.println(nameList);
This statement yields :[ James, Catherine ]
• The ArrayList class's remove method removes designated
item from the ArrayListnameList.remove(1);
This statement removes the second item.
• See example: ArrayListDemo3.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-162
Using an ArrayList
• The ArrayList class's add method with one argument adds new items to the end of the ArrayList
• To insert items at a location of choice, use the add method with two arguments:
nameList.add(1, "Mary");
This statement inserts the String "Mary" at index 1
• To replace an existing item, use the set method:nameList.set(1, "Becky");
This statement replaces “Mary” with “Becky”
• See example: ArrayListDemo5.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-163
Using an ArrayList
• An ArrayList has a capacity, which is the number of items
it can hold without increasing its size.
• The default capacity of an ArrayList is 10 items.
• To designate a different capacity, use a parameterized
constructor:
ArrayList<String> list = new ArrayList<String>(100);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Using an ArrayList
• You can store any type of object in an ArrayList
7-164
ArrayList<BankAccount> accountList =
new ArrayList<BankAccount>();
This creates an ArrayList that can hold
BankAccount objects.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved.
Using an ArrayList
7-165
// Create an ArrayList to hold BankAccount objects.
ArrayList<BankAccount> list = new ArrayList<BankAccount>();
// Add three BankAccount objects to the ArrayList.
list.add(new BankAccount(100.0));
list.add(new BankAccount(500.0));
list.add(new BankAccount(1500.0));
// Display each item.
for (int index = 0; index < list.size(); index++)
{
BankAccount account = list.get(index);
System.out.println("Account at index " + index +
"\nBalance: " + account.getBalance());
}
See: ArrayListDemo6.java
Using an ArrayList
• The diamond operator
– Beginning in Java 7, you can use the <> operator
for simpler ArrayList declarations:
Java infers the type of the ArrayList object from the
variable declaration.
ArrayList<String> list = new ArrayList<>();
No need to specify the data type here.