a4_v3.html.zip

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 ;
     }
}