Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Currently stuck trying to figure this out and I don't know what to do. I'll include the starter code as well (Done using Java) (A)

Currently stuck trying to figure this out and I don't know what to do. I'll include the starter code as well (Done using Java)

(A) the Animal class: o [+1] Change Animal to an abstract class. [+2] Explain in a comment in your program why it makes sense for this class to be abstract. o [+1] Change sound() to an abstract method. [+2] Explain in a comment why it makes sense for this method to be abstract. Why dont we just remove it from Animal and keep it in the subclasses?

(B) the Farm class: o [+1] change your code so that the animals array will have enough space for a 100 animals. (No need to add a 100 animals in the Farms constructor see the next two points). Add a method boolean add(Animal anim) that adds an animal to the next empty spot in the animals array. For example, when you first create animals, it will have a 100 empty spots (i.e. all null). The code below adds a new chicken at index 0 and a cow at index 1. The remaining spots will remain empty (i.e. equal to null). myFarm.add(new Chicken()); myFarm.add(new Cow()); The add method should return true when the given animal is added successfully, and false when the farm is full (i.e. no empty spots in animals array).

Modify the Farms constructor to use the above add method in order to add a chicken, a cow, and two llamas. The animals array should now have exactly 4 animals and 96 empty spots.

Modify the getAnimals method so that it returns an array with existing animals only (i.e. don't return the full animals array if it has empty spots). For example, if you have only 4 animals in your farm, getAnimals will return a new array of the size 4 with these 4 animals.

Add a method void animSort() that sorts the animals in the animals array based on their energy. You must use the Arrays.sort method in your implementation. For example, suppose that animals = [Cow1, Chicken1, Llama1, null, null, , null] and assume that the order based on the energy is Llama1 < Chicken1 < Cow1. Then, animSort would change animals to: animals = [Llama1, Chicken1, Cow1, null, null, , null]

Implement any changes outside the Farm class in order for animSort() to work properly.

Add a method boolean addClone(Animal anim) that clones the given animal, anim, and adds it to the animals array. For example, if animals has 4 animals and we call myFarm.addClone(animals[2]), a clone of animals[2] would be created and added to animals at the next available spot. The method addClone returns true if the animal is added successfully to animals and false if the farm is full.

Implement any changes outside the Farm class in order for addClone to work properly.

Add a method displayAnimals that will print the list of animals currently living in the farm. For example, if myFarm has only two animals, then myFarm.printAnimals() may print this output: Chicken1: alive at (0.0,0.0) Energy=28.9 Cow1 : alive at (0.0,0.0) Energy=87.5

Add a method int getNumChicken()that returns the number of chicken in the farm.

Add two more methods, getNumCows()and getNumLlamas() that return the number of cows and llamas on the farm. (hint: use instanceof). o [+2] Add a method void displaySummary() that prints the total number of animals, the number of each animal type, and the amount of available food (see sample output in part C below). (C) update the FarmTest class with the code given below. public class FarmTest { public static void main(String[] args) throws CloneNotSupportedException { Farm myFarm = new Farm(); for(Animal a: myFarm.getAnimals()) a.setEnergy(Math.random()*100); System.out.println(" Initial list of animals: -------------------------"); myFarm.printAnimals(); System.out.println(" Adding a clone of the second animal ----------------------------------"); myFarm.addClone(myFarm.getAnimals()[1]); myFarm.printAnimals(); System.out.println(" After SORTING: --------------"); myFarm.animSort(); myFarm.printAnimals(); System.out.println(" Farm summary: --------------"); myFarm.printSummary(); } } Above code should print an output similar to the one below. Note that this output may be slightly different based on several factors such as your animals energy and the available food in the farm. Chicken1 says: I'm hungry Initial list of animals:

-------------------------

Chicken1: alive at (0.0,0.0) Energy=44.5

Cow1 : alive at (0.0,0.0) Energy=98.2

Llama1 : alive at (0.0,0.0) Energy=72.4

Llama2 : alive at (0.0,0.0) Energy=94.3 Adding a clone of the second animal

-----------------------------------

Chicken1: alive at (0.0,0.0) Energy=44.5

Cow1 : alive at (0.0,0.0) Energy=98.2

Llama1 : alive at (0.0,0.0) Energy=72.4

Llama2 : alive at (0.0,0.0) Energy=94.3

Cow1 : alive at (0.0,0.0) Energy=98.2 After SORTING:

--------------

Chicken1: alive at (0.0,0.0) Energy=44.5

Llama1 : alive at (0.0,0.0) Energy=72.4

Llama2 : alive at (0.0,0.0) Energy=94.3

Cow1 : alive at (0.0,0.0) Energy=98.2

Cow1 : alive at (0.0,0.0) Energy=98.2 Farm summary:

--------------

The farm has: - 5 animals (1 Chicken, 2 Cows, and 2 Llamas)

1000 units of available food

public class Animal { private String name; private double energy, mealAmount, x, y, speedX=1, speedY=1; private boolean alive; public Animal() { setEnergy(100); } public void speak(String msg){ if (isAlive()) System.out.println(getName() + " says: " + msg); } public double eat(){ if (isAlive()) { //get amount needed and round to 2 decimals double amount = Math.round((100-getEnergy())*100)/100.0; if (amount >= mealAmount) { System.out.println(getName() + " ate " + mealAmount + " units"); setEnergy(getEnergy() + mealAmount); return mealAmount; } else if (amount > 0) { System.out.println(getName() + " ate " + amount + " units. Now it is full!"); setEnergy(100); return amount; } else { System.out.println(getName() + " didn't eat. It is full!"); return 0; } } else { System.out.println(getName() + " is dead!"); return 0; } } public void move() { if(isAlive()){ x += speedX; y += speedY; setEnergy(getEnergy() - 0.1); }else System.out.println(getName() + "can't move. It is dead!"); } public void sound(){if(isAlive()) System.out.println("Unknown sound!");} //setters, getters, toString public String getName() { return name; } public double getEnergy() { return energy; } public void setName(String name) { this.name = name; } public void setEnergy(double energy) { if(energy>0 && energy <=100) this.energy = energy; if(this.energy <= 17 ) System.out.println(getName() + " says: I'm STARVING"); else if(this.energy <= 50) System.out.println(getName() + " says: I'm hungry"); this.alive = (energy > 0); } public double getMealAmount() { return mealAmount; } public void setMealAmount(double mealAmount) { if(mealAmount>0 && mealAmount<100) this.mealAmount = mealAmount; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public double getSpeedX() { return speedX; } public void setSpeedX(double speedX) { this.speedX = speedX; } public double getSpeedY() { return speedY; } public void setSpeedY(double speedY) { this.speedY = speedY; } public boolean isAlive() { return alive; } public String toString(){ //return String.format("Alive:%b Name:%-10sEnergy:%-7.1fLocation:(%-2.1f,%-2.1f)", isAlive(), name, energy,x,y); return String.format("%-8s: %-5s at (%-2.1f,%-2.1f) Energy=%-7.1f", name, isAlive()?"alive":"dead",x,y,energy); } }

public class Farm { private double availableFood; private Animal[] animals; public Farm() { setAvailableFood(1000); animals = new Animal[4]; animals[0] = new Chicken(); animals[1] = new Cow(); animals[2] = new Llama(); animals[3] = new Llama(); } public void makeNoise(){ // all animals make their sound (Moo, Cluck, etc) for(Animal animal: animals) animal.sound(); } public void feedAnimals(){ // restore energy of all animals and deduct amount eaten from availableFood for(Animal animal : animals) if(availableFood >= Math.min(animal.getMealAmount(), (100-animal.getEnergy()))) // no penalty if student uses: if(availableFood >= animal.getMealAmount()) availableFood -= animal.eat(); else System.out.println("Not enough food for your animals! You need to collect more food items."); } public double getAvailableFood() { return availableFood; } public void setAvailableFood(double availableFood) { if(availableFood>=0 && availableFood<=1000) this.availableFood = availableFood; } public Animal[] getAnimals() { return animals; } }

public class FarmTest { public static void main(String[] args) { Farm myFarm = new Farm(); for(Animal a:myFarm.getAnimals()) for(int i=0; i<(int)(Math.random()*1000); i++) a.move(); System.out.println("Before feeding: " + myFarm.getAvailableFood()); myFarm.feedAnimals(); System.out.println("After feeding: " + myFarm.getAvailableFood()); myFarm.makeNoise(); myFarm.getAnimals()[0].speak("Hello!!"); System.out.println(Arrays.toString(myFarm.getAnimals())); } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Readings In Database Systems

Authors: Michael Stonebraker

2nd Edition

0934613656, 9780934613651

More Books

Students also viewed these Databases questions

Question

3. What are the current trends in computer hardware platforms?

Answered: 1 week ago