Download Arrays2aOld2

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Arrays
Pepper
What is an Array
• A box that holds many of the exact same type
in mini-boxes
• A number points to the mini-box
• The number starts at 0
• String is an array
• Ex: Array of money earned in the top row of a
Jeopardy board:
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
Defining an Array
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
int[] intJeopardy = new int[7]
• 6 is the highest subscript
• Array holds 7 items [called its length]
• Note the number used to create it is the
length – 1
• This would create the exact same array, plus
put in initial values:
int[] intJeopardy = {0,0,0,0,0,0,0}
Getting to an Array mini-box
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
• x = intJeopardy[1] ;
means x will get the value -100
• intJeopardy[3] = 500;
means the 200 will change to 500
• for (int intCount = 0 ; intCount<= 6; intCount++){
intJeopardy[intCount] = 100;
}
means every value will change to 100
• intJeopardy[7] will CRASH
• (reminder: create this array with: int[] intJeopardy = new
int[7])
Getting to an Array mini-box
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
What will the box look like after these statements:
intX = 3;
intJeopardy[1] = 500;
intJeopardy[4] = intX;
intJeopardy[intX] = 70;
intJeopardy[2+intX] = 600;
intJeopardy[6] = intX+5;
Create your own Array
In BlueJ
Set up an intJeopardy array with 7 elements and
set some values, and then show the values of
those elements by printing them:
Put 600 in the first box
Put 100 in the 4th box (box 3)
Create your own Array Solution
In BlueJ
Set up an intJeopardy array with 7 elements and set some
values, and then show the values of those elements by
printing them:
int [] intJeopardy = new int[7]
intJeopardy[3] = 100
intJeopardy[0] = 600
System.out.println( intJeopardy[3] + “ is the value in box
3”]
System.out.println( intJeopardy[0] + “ is the value in box
0”]
Initializing an Array
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
How do you set all values in the array to 0? Hint:
a for loop from 0 to 6 could give you all the
subscripts in the loop
for (int intCount = 0 ; intCount<=6; intCount++){
intJeopardy[intCount] = 0;
}
More using an Array
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
What will this do?
System.out.println(“Enter a number”);
intJeopardy[4] = scan.NextInt();
Resolve right side:
• scan.NextInt();
• gets a number from the user
Put into left side variable
• Puts the number into the mini-box above #4
Total the Value Held
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
• Loop through the array mini-boxes adding the
values
int intTot = 0;
for (int intCount = 0; intCount <= 6; intCount++){
intTot = intJeopardy[intCount] + intTot;
}
System.out.println(“The total money earned in the top row is “ + intTot);
Parallel Arrays
intJeopardy: Cash Value of each box:
100
-100
0
200
300
0
0
0
1
2
3
4
5
6
intPlayed: Played indicator of each box:
True
True
False
True
True
True
false
0
1
2
3
4
5
6
Has Jeopardy question 5 been played?
Does the 0 in box 5 mean the question hasn’t been
played, or that it earned 0 points?
Show a message saying the 0 is the score or not
if (intPlayed[5] == true) {
System.out.println( intJeopardy[5] + “ is the score” );}
else {
System.out.println( intJeopardy[5] + “ is not the score”);}
Practice Array Work
• Consider the following program (input underlined):
How many days' temperatures? 7
Day 1's high temp: 45
Day 2's high temp: 44
Day 3's high temp: 39
Day 4's high temp: 48
Day 5's high temp: 37
Day 6's high temp: 46
Day 7's high temp: 53
Average temp = 44.57142857142857
4 days were above average.
• We need the temperatures to compute the average, and again to tell how
many were above average.
• (credit our textbook with this problem and solution)
Weather Starter – Help to start
// This program reads several days' temperatures from the user
// and computes the average and how many days were above average.
import java.util.Scanner;
public class Weather {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("How many days' temperatures? ");
int days = console.nextInt();
days)
// create an array to store days' temperatures (as many cells as
// initialize a total bucket
for (int i = 0; i < days; i++) {
// read/store each day's temperature
System.out.print(“Enter Day " + (i + 1) + "'s high temp: “);
// save the nextInt into your array of temperatures
// add the temperature to your bucket
}
// calculate the average
// see if each day is above average by doing searching through the
array,
// comparing each element to the average
}
}
13
// print the average temp
// print the total count of days above average
Weather answer
// This program reads several days' temperatures from the user
// and computes the average and how many days were above average.
import java.util.Scanner;
public class Weather {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("How many days' temperatures? ");
int days = console.nextInt();
int[] temperatures = new int[days];
temperatures
int sum = 0;
// array to store days'
for (int i = 0; i < days; i++) {
// read/store each day's
temperature
System.out.print("Day " + (i + 1) + "'s high temp: ");
temperatures[i] = console.nextInt();
sum += temperatures[i];
}
double average = (double) sum / days;
int count = 0;
// see if each day is above
average
for (int i = 0; i < days; i++) {
if (temperatures[i] > average) {
count++;
}
}
14
}
}
// report results
System.out.println("Average temp = " + average);
System.out.println(count + " days above average");
The Arrays class – A static helper
• The Arrays class in package java.util has
several useful static methods for manipulating arrays:
Method name
Description
binarySearch(array, value) returns the index of the given value
in this array (< 0 if not found)
equals(array1, array2)
returns true if the two given arrays
contain exactly the same elements in
the same order
fill(array, value)
sets every element in the array to
have the given value
sort(array)
arranges the elements in the array
into ascending order
toString(array)
returns a string representing the
array, such as "[10, 30, 17]"
15
Arrays.toString
•
The Arrays.toString method is useful when you want to print an array's
elements.
– Arrays.toString accepts an array as a parameter and returns the
String representation, which you can then print.
– Example:
int[] a = {2, 5, 1, 6, 14, 7, 9};
for (int i = 1; i < a.length; i++) {
a[i] += a[i - 1];
}
System.out.println("a is " + Arrays.toString(a));
Output:
a is [2, 7, 8, 14, 28, 35, 44]
16
Arrays.toString
• The Arrays.toString method is useful when you want to print an
array's elements.
– Arrays.toString accepts an array as a parameter and returns the
String representation, which you can then print.
– Example:
int[] a = {2, 5, 1, 6, 14, 7, 9};
for (int i = 1; i < a.length; i++) {
a[i] += a[i - 1];
}
System.out.println("a is " +
Arrays.toString(a));
17
Output:
a is [2, 7, 8, 14, 28, 35, 44]
Two Dimensional Arrays
0
100
-100
0
200
300
0
0
1
200
500
66
666
0
6
300
0
1
2
3
4
5
6
int [][] intJeopardy= new int[2][7] ;
intJeopardy[1][3] is value 666
intJeopardy[0][4] is value 300
What is intJeopardy[0][0] value:
What is intJeopardy[1][6] value:
What is intJeopardy[1][3] value:
What is intJeopardy[2][6] value:
What is intJeopardy[1][7] value:
Two Dimensional Arrays
0
100
-100
0
200
300
0
0
1
200
500
66
666
0
6
300
0
1
2
3
4
5
6
int [][] intJeopardy= new int[2][7] ;
intJeopardy[1][3] is value 666
intJeopardy[0][4] is value 300
What is intJeopardy[0][0] value: 100
What is intJeopardy[1][6] value: 300
What is intJeopardy[1][3] value: 666
What is intJeopardy[2][6] value: crash
What is intJeopardy[1][7] value: crash
Array of Objects
You can have an array of objects:
Player class holds name and score.
Player [] objPlayer = new Player[4];
car
objPlayer[1].name = “Carrie”; ma
ry
rie
objPlayer[1].score = 50;
100
50
What is objPlayer[3].score?
0
1
What is objPlayer[0].name?
What is objPlayer[2].name?
2
am
y
joh
n
90
0
3
Functions using Arrays
• An array variable is actually a pointer to the set of
boxes, so…
– Methods can change the mini-boxes in the main
program [though it cannot repoint to another
location]
• Defining in method header:
– Use [] after the variable type, and all else the same
– Don’t know how big it will be, so leave [] empty
public static int[] mymethod(int[] arrayin){
Array parameter questions
• Write a method named average that accepts an array of integers as its
parameter and returns the average of the values in the array.
• Write a method named contains that accepts an array of integers and a
target integer value as its parameters and returns whether the array
contains the target value as one of its elements.
• Write a method named roundAll that accepts an array of doubles as
its parameter and modifies each array element by rounding it to the
nearest whole number.
22
Array parameter answers
public static double average(int[] numbers) {
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
return (double) sum / numbers.length;
}
public static boolean contains(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
if (values[i] == target) {
return true;
}
}
return false;
}
public static void roundAll(double[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = Math.round(array[i]);
}
}
23
String methods with arrays
• These String methods return arrays:
String s = "long book";
Method name
toCharArray()
Description
separates this string
into an array of its
characters
split(delimiter) separates this string
into substrings by the
given delimiting string
Example
s.toCharArray()
returns
{'l', 'o', 'n', 'g', ' ',
'b', 'o', 'o', 'k'}
s.split(" ") returns
{"long", "book"}
s.split("o") returns
{"l", "ng b", "", "k"}
24
String/array problems
•
Write a method named areAnagrams that accepts two Strings as parameters
and returns whether those strings contain the same letters (in any order).
– areAnagrams("bear", "bare") returns true
– areAnagrams("sale", "sail") returns false
– Use any relevant methods from the Arrays class.
•
Write a method named wordCount that accepts a String as its parameter and
returns the number of words in that string. Words are separated by spaces.
– wordCount("the quick brown fox") returns 4
25
Main – arg Explained!
•
command-line arguments: Parameters passed to your program as it is run.
– The parameters are passed into main as an array of Strings.
– The parameters can be typed into a command prompt or terminal window, or
directly in some editors such as DrJava.
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("arg " + i + ": " + args[i]);
}
}
•
26
Example:
> java
arg 0:
arg 1:
arg 2:
ExampleProgram how are you?
how
are
you?