Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Even even more
on being classy
Aaron Bloomfield
CS 101-E
Chapter 4+
1
Consider this sequence of events…
2
What happened?
Java didn’t “repaint” the rectangles when
necessary
Java only painted the rectangle once
You can tell Java to repaint it whenever
necessary
This is beyond the scope of this class, though!
3
Seeing double
import java.awt.*;
public class SeeingDouble {
public static void main(String[] args) {
ColoredRectangle r = new ColoredRectangle();
System.out.println("Enter when ready");
Scanner stdin = new Scanner (System.in);
stdin.nextLine();
r.paint();
r.setY(50);
r.setColor(Color.RED);
r.paint();
}
}
4
Seeing double
When paint() was called, the previous
rectangle was not erased
This is a simpler way of implementing this
Perhaps clear and repaint everything
when a rectangle paint() is called
5
Code from last class
// Purpose: Create two windows containing colored rectangles.
import java.util.*;
public class BoxFun {
//main(): application entry point
public static void main (String[] args) {
ColoredRectangle r1 = new ColoredRectangle();
ColoredRectangle r2 = new ColoredRectangle();
System.out.println("Enter when ready");
Scanner stdin = new Scanner (System.in);
stdin.nextLine();
r1.paint();
r2.paint();
}
}
// draw the window associated with r1
// draw the window associated with r2
6
public class ColoredRectangle {
// instance variables for holding object attributes
private int width;
private int height;
private JFrame window;
private int x;
private int y;
private Color color;
// ColoredRectangle(): default constructor
public ColoredRectangle() {
color = Color.BLUE;
width = 40;
x = 80;
height = 20;
y = 90;
window = new JFrame("Box Fun");
window.setSize(200, 200);
window.setVisible(true);
}
// paint(): display the rectangle in its window
public void paint() {
Graphics g = window.getGraphics();
g.setColor(color);
g.fillRect(x, y, width, height);
}
}
7
r
public
class
public
void paint(){ {
ColoredRectangle
Graphicsint
g =width;
private
window.getGraphics();
private
int x, y;
g.setColor(color);
private
int height;
g.fillRect
private
int (x,
y; y,
width,JFrame
height);
private
window;
} private Color color;
ColoredRectangle r = new ColoredRectangle();
ColorRectangle
- width = 40
0
- height = 20
0
- x = 80
0
- y = 90
0
- color =
- window =
Color
- color =
- ...
+ brighter() : Color
+ ...
+ paint() : void
public ColoredRectangle() {
color = Color.BLUE;
width = 40;
JFrame
height = 20;
- width = 200
y = 90;
- height = 200
x = 80;
- title =
window = new
- grafix =
JFrame
- ...
("Box Fun");
+ setVisible (boolean status) : void
window.setSize
+ getGraphics () : Graphics
(200, 200);
+ setSize (int w, int h) : void
window.setVisible
+…
(true);
g
}
String
- text = “Box Fun”
- ...
+ length() : int
+ ...
Graphics
-…
+ fillRect() : void
+ setColor(Color) :8void
+ ...
The Vector class
In java.util
Must put “import java.util.*;” in the java file
Probably the most useful class in the
library (in my opinion)
A Vector is a collection of “things” (objects)
It has nothing to do with the geometric vector
9
Vector methods
Constructor: Vector()
Adding objects: add (Object o);
Removing objects: remove (int which)
Number of elements: size()
Element access: elementAt()
Removing all elements: clear()
10
Vector code example
Vector v = new Vector();
System.out.println (v.size() + " " + v);
0 []
v.add ("first");
System.out.println (v.size() + " " + v);
1 [first]
v.add ("second");
v.add ("third");
System.out.println (v.size() + " " + v);
3 [first, second, third]
String s = (String) v.elementAt (2);
System.out.println (s);
third
String t = (String) v.elementAt (3);
System.out.println (t);
(Exception)
v.remove (1);
System.out.println (v.size() + " " + v);
2 [first, third]
v.clear();
System.out.println (v.size() + " " + v);
0 []
11
What we wish computers could do
12
The usefulness of Vectors
You can any object to a Vector
Strings, ColoredRectanges, JFrames, etc.
They are not the most efficient for some
tasks
Searching, in particular
13
About that exception…
The exact exception was:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
at java.util.Vector.elementAt(Vector.java:431)
at VectorTest.main(VectorTest.java:15)
Where the problem occured
14
A Vector of ints
Consider the following code:
Vector v = new Vector();
v.add (1);
Causes a compile-time error
Most of the time - see disclaimer later
C:\Documents and Settings\Aaron\My
Documents\JCreator\VectorTest\VectorTest.java:7:
cannot resolve symbol
symbol : method add (int)
location: class java.util.Vector
v.add (1);
15
What happened?
The Vector add() method:
boolean add(Object o)
Primitive types are not objects!
Solution: use wrapper classes!
16
More on wrapper classes
A wrapper class allows a primitive type to act as
an object
Each primitive type has a wrapper class:
Boolean
Character
Byte
Short
Integer
Long
Float
Double
Note that char and int don’t have the exact same
name as their wrapper classes
17
Vector code example
Vector v = new Vector();
System.out.println (v.size() + " " + v);
0 []
v.add (new Integer(1));
System.out.println (v.size() + " " + v);
1 [1]
v.add (new Integer(2));
v.add (new Integer(3));
System.out.println (v.size() + " " + v);
3 [1, 2, 3]
Integer s = (Integer) v.elementAt (2);
System.out.println (s);
3
Integer t = (Integer) v.elementAt (3);
System.out.println (t);
(Exception)
v.remove (1);
System.out.println (v.size() + " " + v);
2 [1, 3]
v.clear();
System.out.println (v.size() + " " + v);
0 []
18
Even more on wrapper classes
They have
variables:
useful
class
(i.e.
static)
Integer.MAX_VALUE
Double.MIN_VALUE
They have useful methods:
String s = “3.14159”;
double d = Double.parseDouble (s);
19
A disclaimer
Java 1.5 (which we are not using) has a
new feature called “autoboxing/unboxing”
This will automatically convert primitive
types to their wrapper classes (and back)
20
An optical illusion
21
Design an air conditioner
representation
Context - Consumer
Repair person
Sales person
Consumer
Behaviors
Attributes
22
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build – construction
Debug
Attributes
23
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build – construction
Debug – to stringing
Attributes
24
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing
Attributes
25
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing
Attributes
26
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on – mutation
Turn off – mutation
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing
Attributes
27
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on – mutation
Turn off – mutation
Get temperature and fan setting – accessing
Set temperature and fan setting – mutation
Build – construction
Debug – to stringing
Attributes
28
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes
Power setting
Fan setting
Temperature setting
29
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes
Power setting
Fan setting
Temperature setting – integer
30
Design an air conditioner
representation
Context - Consumer
Behaviors
Turn on
Turn off
Get temperature and fan setting
Set temperature and fan setting
Build -- construction
Debug
Attributes
Power setting – binary
Fan setting – binary
Temperature setting – integer
31
Ugh…
32
Design an air conditioner
representation
// Represent an air conditioner – from consumer view point
public class AirConditioner {
// instance variables
// constructors
// methods
}
Source AirConditioner.java
33
Static variables and constants
// shared resource for all AirConditioner objects
static public final int OFF = 0;
Static public final int ON = 1;
static public final int LOW = 0;
Static public final int HIGH = 1;
static public final int DEFAULT_TEMP = 72;
Every object in the class has access to the same static variables
and constants
A change to a static variable is visible to all of the objects in the class
Examples StaticDemo.java and DemoStatic.java
34
Instance variables
// individual object attributes
int powerSetting;
int fanSetting;
int temperatureSetting;
Instance variables are always initialized as soon the object comes
into existence
If no value is specified
0 used for numeric variables
false used for logical variables
null used for object variables
Examples InitializeDemo.java
35
Constructors
// AirConditioner(): default constructor
public AirConditioner() {
this.powerSetting = AirConditioner.OFF;
this.fanSetting = AirConditioner.LOW;
this.temperatureSetting = AirConditioner.DEFAULT_TEMP;
}
// AirConditioner(): specific constructor
public AirConditioner(int myPower, int myFan, int myTemp) {
this.powerSetting = myPower;
this.fanSetting = myFan;
this.temperatureSetting = myTemp;
}
Example AirConditionerConstruction.java
36
Simple mutators
// turnOn(): set the power setting to on
public void turnOn() {
this.powerSetting = AirConditioner.ON;
}
// turnOff(): set the power setting to off
public void turnOff() {
this.powerSetting = AirConditioner.OFF;
}
Example TurnDemo.java
37
Simple accessors
// getPowerStatus(): report the power setting
public int getPowerStatus() {
return this.powerSetting;
}
// getFanStatus(): report the fan setting
public int getFanStatus() {
return this.fanSetting;
}
// getTemperatureStatus(): report the temperature setting
public int getTemperatureStatus () {
return this.temperatureSetting;
}
Example AirConditionerAccessors.java
38
Parametric mutators
// setPower(): set the power setting as indicated
public void setPower(int desiredSetting) {
this.powerSetting = desiredSetting;
}
// setFan(): set the fan setting as indicated
public void setFan(int desiredSetting) {
this.fanSetting = desiredSetting;
}
// setTemperature(): set the temperature setting as indicated
public void setTemperature(int desiredSetting) {
this.temperatureSetting = desiredSetting;
}
Example AirConditionerSetMutation.java
39
Facilitator toString()
// toString(): produce a String representation of the object
public String toString() {
String result = "[ power: " + this.powerSetting
+ ", fan: " + this.fanSetting
+ ", temperature: " + this.temperatureSetting
+ " ] ";
return result;
}
40
Sneak peek facilitator toString()
public String toString() {
String result = "[ power: " ;
if ( this.powerSetting == AirConditioner.OFF ) {
result = result + "OFF";
} else {
result = result + "ON " ;
}
result = result + ", fan: ";
if ( this.fanSetting == AirConditioner.LOW ) {
result = result + "LOW ";
} else {
result = result + "HIGH";
}
result = result + ", temperature: " + this.temperatureSetting + " ]";
return result;
}
41
What computers were made for
NASA’s WorldWind
See http://learn.arc.nasa.gov/worldwind/
42