xx
Content/activities/activity4/a4_v3.html
COMP 1020
Version 3: A collection of properties
Static methods are one way to manage a list. But it would be more convenient if we could wrap up the list and the operations we perform on it into a single unit. We can do this by writing our own collection class, where the ArrayList is an instance variable of that class, and the operations are instance methods.
A collection of properties owned by a speculator is known as their real estate portfolio. The Portfolio class will be used to gather together this information and the operations we've written. We can also store the speculator's name.
class Portfolio { private ArrayList<Property> list; private String owner; public Portfolio(String owner) { list = new ArrayList<Property>(); this.owner = owner; } public void add(Property p) { list.add(p); } public void print() { int totalValue; System.out.println(owner + "'s portfolio:"); totalValue = 0; for (int i = 0; i < list.size(); i++) { System.out.println(" " + list.get(i)); totalValue += list.get(i).value(); } System.out.println("Total value: $" + totalValue); } public void subdivide(int position, boolean lengthwise) { Property toSubdivide; Property subdivision; toSubdivide = list.get(position); subdivision = toSubdivide.subdivide(lengthwise); list.add(subdivision); } public void transfer(int position, Portfolio buyer) { Property toTransfer; toTransfer = list.get(position); list.remove(position); buyer.add(toTransfer); return toTransfer; } }Notice how the ArrayList is created in the constructor, not passed to it. Also notice the need for an add method: we do not directly access the ArrayList so the only way to manipulate it is through methods in the collection class. The instance methods already have access to the list through the instance variable. Only the transfer method needs to be passed a list, but in this case, it will be passed the buyer's Portfolio.
This class has no toString() method; it has print() instead. We could have written it as toString() but that method would have had to build a complex multiple-line string and return it.To use this class, the main program needs to be modified to use portfolios instead of using array lists directly.
public static void main(String[] args) { Portfolio jim, helen; Property property; jim = new Portfolio("Jim"); jim.add(new Property(16, 8, 160)); jim.add(new Property(24, 17, 130)); jim.add(new Property(129, 180, 35)); helen = new Portfolio("Helen"); helen.add(new Property(9, 13, 120)); helen.add(new Property(15, 15, 210)); helen.add(new Property(9, 13, 120)); jim.print(); helen.print(); jim.subdivide(0, true); jim.subdivide(2, false); helen.subdivide(0, false); property = jim.transfer(1, helen); System.out.println(property + " transferred from Jim to Helen for $" + property.value()); property = helen.transfer(3, jim); System.out.println(property + " transferred from Helen to Jim for $" + property.value()); jim.print(); helen.print(); }One of the advantages of a collection class is that it limits us to only using the list as allowed by the problem. For example, we cannot arbitrarily remove a property from a portfolio; it can only be transferred to another speculator's portfolio. These limitations help prevent our programs from having unintended behaviours, which becomes more of a concern as our programs get more complex.
Java file Version 3 link. Click on the link and save the Zip file to your computer.
Content/css/comp_1020_new.css
@charset "utf-8"; /* CSS Document */ body {height: auto;margin-top: 10px; margin-left: 25px; margin-bottom: 10px;} #container { width: 780px; height:468px; padding-left: 47px; padding-top: 50px; padding-right: 35px; margin: auto; background-image: url(unit1.jpg); left: 38px; } #containersmall { width: 780px; height:468px; padding-left: 47px; padding-top: 0px; padding-right: 35px; margin: auto; background-image: url(unit1.jpg); left: 38px; } #banner { width:800px; height:100px; } .h1 { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; color:#7eae37; margin-bottom:-10pt; } .h1b { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#000000; } .h1w { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#006699; } .h2 { font-family:Arial, Helvetica, sans-serif; font-size:13pt; font-weight:bold; color:#244062; font-style:normal; position: relative; background-color: #FFFFFF; } .h2b { font-family:Arial, Helvetica, sans-serif; font-size:12pt; font-weight:bold; font-variant:small-caps; color:#999966; font-style:normal; } .h3 { font-family:Arial, Helvetica, sans-serif; font-size:11.5pt; font-style:normal; font-weight:bold; color:#244062; margin-bottom:-7pt; } .h3b { font-family:Arial, Helvetica, sans-serif; font-size:16pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#336699 } #page { width:780px; height:994px; left: 7px; top: 166px; padding-left: 10px; padding-right: 10px; } .body { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; font-style:normal; font-weight:normal; color:#000000; line-height:14pt; } .body_box { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; font-style:normal; font-weight:normal; color:#000000; line-height:14pt; } .body_bold { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; font-style:normal; font-weight:bold; color:#006699 } .body_bold_box { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; font-style:normal; font-weight:bold; color:##006699 } .body_dr_green { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#336600 } .definition { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:italic; font-weight:normal; border-width:.25pt; border-style:solid; border-color: #CCCCCC; border-collapse:separate; empty-cells:hide; } .toc { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#669933 } a:link {color:#0000FF; text-decoration:underline; font-family:Arial, Helvetica, sans-serif;} a:visited {color:#0000FF; text-decoration:underline;font-family:Arial, Helvetica, sans-serif;} .top { font-family:Arial, Helvetica, sans-serif; font-size:8pt; font-style:normal; font-weight:normal; } p.ind { text-indent:-20px; margin-left:20px; font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#000000 } .quote { margin-left:40px; margin-right:40px; font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#000000 } .blackBox { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; background-color:#FFFFFF; border: 1.5px solid #000; padding-top: 10px; padding-left: 15px; padding-right: 5px; padding-bottom: 10px; margin-right: 200px; margin-left: 3px; } .blueBox { background-color: #daeef4; border: 1.5px solid #FFF; padding-top: 10px; padding-left: 15px; padding-right: 5px; padding-bottom: 10px; margin-left: -10px; margin-right: -15px; } .yellowBox { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; background-color: #FFFF99; border: 1.5px solid #FFF; padding-top: 10px; padding-left: 15px; padding-right: 5px; padding-bottom: 10px; margin-left: -10px; margin-right: -15px; } .blackBorder { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; background-color: #FFFFFF; border: 1.5px solid #00000; padding-top: 10px; padding-right: -17px; padding-bottom: 14px; margin-right: 200px; margin-left: 3px; } .blackBorderwy { font-family:Arial, Helvetica, sans-serif; font-size:10.5pt; background-color: #FFFFCC; border: 1.5px solid #00000; padding-top: 10px; padding-right: -17px; padding-bottom: 14px; margin-right: 200px; margin-left: 3px; } .blueBorder { background-color: #FFFFFF; border: 1.5px solid #669966; padding-top: 10px; padding-right: -17px; padding-bottom: 14px; margin-right: 200px; margin-left: 3px; } .biol_head { font-family:Arial, Helvetica, sans-serif; font-size:12pt; font-style:normal; font-weight:bold; color:#FFFFFF; } .body_white { font-family:Arial, Helvetica, sans-serif; font-size:9pt; font-style:normal; font-weight:normal; color:#FFFFFF } .body_white_bold { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:bold; color:#FFFFFF }
Content/css/COMP1020.css
@charset "utf-8"; /* CSS Document */ body {margin-top: 10px; margin-left: 25px; margin-bottom: 10px;} #container { width: 780px; height:591px; padding-left: 47px; padding-top: 50px; padding-right: 35px; margin: auto; } #banner { left:25px; top: 10px; width:800px; height:100px; padding-bottom: 30px; } .heading_banner { margin: 0px 0px 0px 0px; padding: 20px 0px 0px 30px; font-size: 34px; font-weight: 400; font-family: Arial, Helvetica, sans-serif; color: #FFF; height: 100px; width: 90%; line-height: 1.1em; opacity: 0.75; letter-spacing: 0.05em; position:absolute; } .h1 { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#336600; margin-bottom:-9pt; } .h1b { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#000000; } .h1w { font-family:Arial, Helvetica, sans-serif; font-size:18pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#FFFFFF; } .h2 { font-family:Arial, Helvetica, sans-serif; font-size:12pt; font-weight:bold; font-variant:small-caps; color:#336600; font-style:normal; position: relative; margin-bottom:3pt; } .h2b { font-family:Arial, Helvetica, sans-serif; font-size:12pt; font-weight:bold; font-variant:small-caps; color:#336699; font-style:normal; } .h3 { font-family:Arial, Helvetica, sans-serif; font-size:16pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#336600; margin-bottom:-7pt; } .h3b { font-family:Arial, Helvetica, sans-serif; font-size:16pt; font-style:normal; font-weight:bold; font-variant:small-caps; color:#336699 } .body { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#000000; } .body_bold { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:bold; color:#000000 } .definition { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:italic; font-weight:normal; border-width:.25pt; border-style:solid; border-color: #CCCCCC; border-collapse:separate; empty-cells:hide; } a:link {color:#336699; text-decoration:underline; font-family:Arial, Helvetica, sans-serif;} a:visited {color:#669933; text-decoration:underline;font-family:Arial, Helvetica, sans-serif;} .top { font-family:Arial, Helvetica, sans-serif; font-size:8pt; font-style:normal; font-weight:normal; } p.ind { text-indent:-20px; margin-left:20px; font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#000000 } .quote { margin-left:40px; margin-right:40px; font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:normal; color:#000000 } .blueBox { background-color: #336699; border: 1px solid #336699; padding-top: 10px; padding-right: 5px; padding-bottom: 10px; padding-left: 10px; } .blueBorder { background-color: #FFFFFF; border: 1px solid #336699; padding-top: 10px; padding-right: 5px; padding-bottom: 10px; padding-left: 10px; } .biol_head { font-family:Arial, Helvetica, sans-serif; font-size:12pt; font-style:normal; font-weight:bold; color:#FFFFFF; } .body_white { font-family:Arial, Helvetica, sans-serif; font-size:9pt; font-style:normal; font-weight:normal; color:#FFFFFF } .body_white_bold { font-family:Arial, Helvetica, sans-serif; font-size:10pt; font-style:normal; font-weight:bold; color:#FFFFFF } .Highlight { background-color: #FFFF00; border: solid thin black; margin-top: .5em; margin-bottom: .5em; margin-right: 20px; margin-left: 20px; padding-top: .5em; padding-bottom: .5em; padding-left: 1em; padding-right: 1em; } .Aside { background-color: lightGrey; border: solid thin black; margin-top: .5em; margin-bottom: .5em; margin-right: 20px; margin-left: 20px; padding-top: .5em; padding-bottom: .5em; padding-left: 1em; padding-right: 1em; } .Action { background-color: #FFFFC0; border: solid thin black; margin-top: .5em; margin-bottom: .5em; margin-right: 20px; margin-left: 20px; padding-top: .5em; padding-bottom: .5em; padding-left: 1em; padding-right: 1em; } .key { background-color: #a9a9a9; color: white; border: solid thin black; font-style: italic; } .menu { background-color: #a9a9a9; color: white; border: solid thin black; } .version { color: olive; font-style: italic; } code { font-family: "Lucida Sans Typewriter", Courier, monospace; color: #222200; background-color: #FFFFE0; } .code { font-family: "Lucida Sans Typewriter", Courier, monospace; background-color: #FFFFB0; border-top: dotted thin black; border-bottom: dotted thin black; padding-top: 1em; padding-bottom: 1em; padding-left: .5em; padding-right: .5em; margin-right: 20px; margin-left: 20px; } .Aside .code { margin-right: 10px; margin-left: 10px; } pre.code { white-space: -moz-pre-wrap; /* Mozilla, supported since 1999 */ white-space: -pre-wrap; /* Opera 4 - 6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 - Text module (Candidate Recommendation) http://www.w3.org/TR/css3-text/#white-space */ word-wrap: break-word; /* IE 5.5+ */ } dfn { font-weight: bold; color: brown; } .Example { background-color: aqua; border: solid thin black; margin-top: .5em; margin-bottom: .5em; margin-right: 20px; margin-left: 20px; padding-left: .5em; padding-right: .5em; } .ref { color: red; font-style: italic; } .filename { font-family: Arial, Helvetica, sans-serif; color: green; text-decoration: underline; } .output { font-family: "Lucida Sans Typewriter", Courier, monospace; color: purple; font-style: italic; } table.bordered { border-width: thin; border-style: solid; border-spacing: 0; } table.bordered td { border-width: thin; border-style: solid; border-spacing: 0; padding-left: 4px; padding-right: 4px; } table.bordered th { border-width: thin; border-style: solid; border-spacing: 0; padding-left: 8px; padding-right: 8px; } th.side { font-weight: bold; color: black; background-color: #ffd0d0; } th.right { font-weight: bold; color: black; background-color: #ffffd0; } th.top { font-weight: bold; color: black; background-color: #ffd0d0; text-alignment: center; } th.side code { background-color: inherit; } th.top code { background-color: inherit; } .InlineTitle { font-weight: bold; } .view { background-color: black; color: white; border: solid thin black; padding: 0.25em 1em; text-decoration: none; } a.view { background-color: black; color: white; border: solid thin black; } a.view:hover { background-color: blue; color: yellow; text-decoration: none; } /*added for IE as above (hover) does not work in IE*/ a.viewOn { background-color: blue; color: yellow; border: solid thin black; padding: 0.25em 1em; text-decoration: none; } ol li { margin-top: 0.3em; margin-bottom: 0.3em; } #footer {margin: 0px 0px 0px 0px; border: thin solid red;}
Content/images/comp1020_banner.jpg
Content/activities/java/Activity4C.zip
Activity4C.java
Activity4C.java
import
java
.
util
.
ArrayList
;
public
class
Activity4C
{
public
static
void
main
(
String
[]
args
)
{
Portfolio
jim
,
helen
;
Property
property
;
jim
=
new
Portfolio
(
"Jim"
);
jim
.
add
(
new
Property
(
16
,
8
,
160
));
jim
.
add
(
new
Property
(
24
,
17
,
130
));
jim
.
add
(
new
Property
(
129
,
180
,
35
));
helen
=
new
Portfolio
(
"Helen"
);
helen
.
add
(
new
Property
(
9
,
13
,
120
));
helen
.
add
(
new
Property
(
15
,
15
,
210
));
helen
.
add
(
new
Property
(
9
,
13
,
120
));
jim
.
print
();
helen
.
print
();
jim
.
subdivide
(
0
,
true
);
jim
.
subdivide
(
2
,
false
);
helen
.
subdivide
(
0
,
false
);
property
=
jim
.
transfer
(
1
,
helen
);
System
.
out
.
println
(
property
+
" transferred from Jim to Helen for $"
+
property
.
value
());
property
=
helen
.
transfer
(
3
,
jim
);
System
.
out
.
println
(
property
+
" transferred from Helen to Jim for $"
+
property
.
value
());
jim
.
print
();
helen
.
print
();
System
.
out
.
println
(
"\nEnd of processing."
);
}
}
class
Property
{
private
int
length
,
width
;
// both are in metres
private
int
valuePerSqM
;
// value in $ per square metre
public
Property
(
int
length
,
int
width
,
int
valuePerSqM
)
{
this
.
length
=
length
;
this
.
width
=
width
;
this
.
valuePerSqM
=
valuePerSqM
;
}
public
int
value
()
{
return
length
*
width
*
valuePerSqM
;
}
public
Property
subdivide
(
boolean
lengthwise
)
{
Property
subdivision
;
if
(
lengthwise
)
{
subdivision
=
new
Property
(
length
/
2
,
width
,
valuePerSqM
);
length
=
(
length
+
1
)
/
2
;
}
else
{
subdivision
=
new
Property
(
length
,
width
/
2
,
valuePerSqM
);
width
=
(
width
+
1
)
/
2
;
}
return
subdivision
;
}
public
String
toString
()
{
return
"Property: "
+
length
+
"m long by "
+
width
+
"m wide ($"
+
valuePerSqM
+
" per square metre)"
;
}
}
class
Portfolio
{
private
ArrayList
<
Property
>
list
;
private
String
owner
;
public
Portfolio
(
String
owner
)
{
list
=
new
ArrayList
<
Property
>
();
this
.
owner
=
owner
;
}
public
void
add
(
Property
p
)
{
list
.
add
(
p
);
}
public
void
print
()
{
int
totalValue
;
System
.
out
.
println
(
owner
+
"'s portfolio:"
);
totalValue
=
0
;
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++
)
{
System
.
out
.
println
(
" "
+
list
.
get
(
i
));
totalValue
+=
list
.
get
(
i
).
value
();
}
System
.
out
.
println
(
"Total value: $"
+
totalValue
);
}
public
void
subdivide
(
int
position
,
boolean
lengthwise
)
{
Property
toSubdivide
;
Property
subdivision
;
toSubdivide
=
list
.
get
(
position
);
subdivision
=
toSubdivide
.
subdivide
(
lengthwise
);
list
.
add
(
subdivision
);
}
public
Property
transfer
(
int
position
,
Portfolio
buyer
)
{
Property
toTransfer
;
toTransfer
=
list
.
get
(
position
);
list
.
remove
(
position
);
buyer
.
add
(
toTransfer
);
return
toTransfer
;
}
}