Home Java Java-tips Oop Q-hammurabi Java: Programming: Kingdom - Solution

Ask Questions?

View Latest Questions

Advertisement


 
 

Java: Programming: Kingdom - Solution
Posted on: April 17, 2011 at 12:00 AM
This page discusses - Java: Programming: Kingdom - Solution

Java Notes

Programming: Kingdom - Solution

  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
// File   : oop/Kingdom.java
// Purpose: Represents a "kingdom".
// Author : Fred Swartz
// Date   : 05 May 2005

class Kingdom {
    //============================================================== constants
    public static int MIN_GRAIN_TO_SURVIVE = 20;
    public static int MAX_LAND_FARMABLE_PER_PERSON = 10;
    public static int SEED_REQUIRED_PER_ACRE = 2;
    
    //===================================================== instance variables
    private int myPopulation =  100;
    private int myGrain      = 3000;
    private int myArea       = 1000;
    
    //========================================================== getPopulation
    public int getPopulation() {
        return myPopulation;
    }
    
    //=============================================================== getGrain
    public int getGrain() {
        return myGrain;
    }
    
    //================================================================ getArea
    public int getArea() {
        return myArea;
    }
    
    //================================================== getAmountOfFoodNeeded
    public int getAmountOfFoodNeeded() {
        return myPopulation * MIN_GRAIN_TO_SURVIVE;
    }
    
    //=================================================== getMaximumUsableSeed
    /** Compute the maximum number of bushels of seed that can be used
     *  based on the number of peasants for farming, and the amount of
     *  land.
     */
    public int getMaximumUsableSeed() {
        int peasantFarmableArea = myPopulation * MAX_LAND_FARMABLE_PER_PERSON;
        int maxFarmableArea = Math.min(myArea, peasantFarmableArea);
        return SEED_REQUIRED_PER_ACRE * maxFarmableArea;
    }
    
    //======================================================== simulateOneYear
    public void simulateOneYear(int food, int seed) {
        //... Don't allow illegal parameter values.  These values
        //    should have been checked before calling this method.
        //    Bad values should have been corrected in the user interface.
        assert food >= 0 && seed >= 0 : "simulateOneYear negative values.";
        assert food + seed <= myGrain : "simulateOneYear parameters too large.";
        
        //... Remove the requested amount of grain from storage
        myGrain = myGrain - food - seed;
        
        //... Compute the random harvest.
        int usableSeed = Math.min(seed, getMaximumUsableSeed());
        int acresPlanted = usableSeed / SEED_REQUIRED_PER_ACRE;
        int yieldPerAcre = 2 + (int)(5 * Math.random());
        int harvest = yieldPerAcre * acresPlanted;
        
        //... Compute the new population
        myPopulation = myPopulation * food / getAmountOfFoodNeeded();
        
        //... Add the new havest to the grain in storage.
        myGrain += harvest;
    }
}
Advertisement


DMCA.com