Sei sulla pagina 1di 25

An introduction to arrays

Problem: a hotel reservation


system
Say we have a hotel of 100 rooms
and we need to know if the rooms are
occupied or not.
What data type should we use to
indicate whether or not a particular
room is occupied?

One solution:
Lets declare 100 boolean variables
(one for each room).
//false will indicate that the room is not
// occupied
boolean room1 = false;
boolean room2 = false;

boolean room100 = false;

How can we determine if a


particular room is occupied?

How do we determine if a particular


room is occupied (w/ an if)?
int which = in.nextInt();
if (which==1) {
if (room1)
System.out.println(
else
System.out.println(
} else if (which==2) {
if (room2)
System.out.println(
else
System.out.println(
} else if (which==3) {

} else if (which==100) {
if (room100)
System.out.println(
else
System.out.println(
}

occupied );
not occupied );
occupied );
not occupied );

occupied );
not occupied );

Is a switch any better?

How do we determine if a particular


room is occupied (w/ a switch)?
int which = in.readint();
switch (which) {
case 1:
if (room1)
else
break;
case 2:
if (room2)
else
break;
case 3:

case 100:
if (room100)
else
break;
}

System.out.println( occupied );
System.out.println( not occupied );
System.out.println( occupied );
System.out.println( not occupied );

System.out.println( occupied );
System.out.println( not occupied );

What if we want to determine


the # of rooms that are
occupied?

What if we want to determine the


# of rooms thaet are occupied?
int count = 0;
if (room1) ++count;
if (room2) ++count;

if (room100)
++count;
System.out.println( count
+ rooms are occupied. );

More hotel problems:


What if we add more rooms to our hotel?
What if we want to see if we have a block
(say 3) of adjacent rooms available?
Our current approach quickly becomes
unwieldy!
So lets introduce something new (arrays)
to help us.

Recall scalars and vectors from


math.
Scalar one number
Vectors list of numbers
Vector X = <1,-2,52>
Or more generally, X = <x1,x2,x3>
subscript

Arrays
List of the same type of things.
Subscript (numbering) starts with 0.
How do we declare an array?
int x[] = new int [100 ];

How do we refer to a particular int?


x[0] = 1;
//first one
x[1] = 7;

x[99] = 52; //last one

Hint:
Remember that an array of 100
elements is subscripted by 0..99.
What if I would like to subscript by
1..100 (or in general, 1..N)?

Hint:
Remember that an array of 100
elements is subscripted by 0..99.
What if I would like to subscript by
1..100 (or in general, 1..N)?
final int N = 100;
int a[] = new int [N+1];

What happens if I try the following?


int ray[] = new int [100];
System.out.println( ray[-1] );
int k = ray[100];

What happens if I try the following?


int ray[] = new int [100];
System.out.println( ray[-1] );
int k = ray[100];
Boom!

How long (how many elements) is


an array?
Ask it!
int howLongIsMyArray = a.length;

Back to the room reservation


problem (now using arrays).
It becomes much easier!
How can we use arrays?

Back to the room reservation


problem (now using arrays).
It becomes much easier!
final int N = 100; //# of rooms
boolean rooms[] = new boolean[N+1];
//init all rooms to unoccupied
How?

Back to the room reservation


problem (now using arrays).
It becomes much easier!
final int N = 100; //# of rooms
boolean rooms[] = new boolean[N+1];
//init all rooms to unoccupied
for (int i=0; i<=N; i++) {
rooms[i] = false;
}

Interesting code to write:


Write a piece of code to find a free
room. It should determine the free
room #. It should yield -1 if no
rooms are free.
Can you write this code?

Interesting code to write:


Write a piece of code to randomly
find a free room. It should determine
the free room #. It should yield -1 if
no rooms are free.
Why is this a better method?
Can you write this code?

Interesting code to write:


Write a piece of code to count the
number of free rooms.
Write a piece of code to count the
number of rooms in use.
Can you write this code?

Interesting code to write:


Write a piece of code to find a block
of 3 free rooms.
It should determine the lowest room
number of the 3 free rooms
(otherwise, -1).
Can you write this code?

Interesting code to write:


Use another array for wakeup calls.
Use another array to indicate whether
or not a room allows smoking or not.
Can you write this code?

Potrebbero piacerti anche