Using java create a simulation of bears and fish in a river, where the bears eat
ID: 3748869 • Letter: U
Question
Using java create a simulation of bears and fish in a river, where the bears eat the fish if possible. The simulation will run in a time steps. At each step, every animal will "decide" how to move using a (pseudo-) random number generator. Is a command line app • A one-dimensional river for the array; maximum of 50 cells; size input by user. • Random class to generate original bear and fish cells, which way the bear or fish tries to move, and which cell they move to on a collision • Bears and fish are numbered for easy validation. Structure • Classes: Driver, containing main; Animal; Bear; Fish. • Develop your own set of methods for each class; each should do one task. • Random class – see the text and the Java API. Use a seed if you want to run the exact same simulation again.
Explanation / Answer
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class River
{
public Animal[] river;
public int length;
public long seed;
private void helper(int l)
{
length = l;
river = new Animal[length];
for (int i = 0; i < length; i++)
{
int k = RandomSingleton.getInstance().nextInt(3);
if(k == 0)
{
river[i] = null;
}
else if(k == 1)
{
river[i] = new Bear();
}
else
{
river[i] = new Fish();
}
}
}
public River(String inputFileName) throws FileNotFoundException
{
try
{
File f = new File(inputFileName);
Scanner s1 = new Scanner(f);
ArrayList<String> x = new ArrayList<String>();
while(s1.hasNext())
{
if(s1.hasNext())
{
x.add(s1.next());
}
else
{
}
}
s1.close();
length = x.size();
river = new Animal[x.size()];
for(int i = 0; i < x.size(); i++)
{
if(x.get(i).equals("---"))
{
river[i] = null;
}
else if(x.get(i).charAt(0) == 'F')//fish
{
if(x.get(i).charAt(1) == 'F')//female
{
river[i] = new Fish((Integer.parseInt(""+x.get(i).charAt(2))), Gender.FEMALE);
}
else //male
{
river[i] = new Fish((Integer.parseInt(""+x.get(i).charAt(2))), Gender.MALE);
}
}
else //bear
{
if(x.get(i).charAt(1) == 'F')//female
{
river[i] = new Bear((Integer.parseInt(""+x.get(i).charAt(2))), Gender.FEMALE);
}
else //male
{
river[i] = new Bear((Integer.parseInt(""+x.get(i).charAt(2))), Gender.MALE);
}
}
}
}
catch(FileNotFoundException e)
{
System.out.println("File does not exist, Goodbye.");
System.exit(-1);
}
}
public River(int length)
{
this.length = length;
helper(this.length);
}
public River(int length, long seed)
{
this.seed = seed;
this.length = length;
helper(this.length);
}
public int getLength()
{
return length;
}
public void setSeed(long seed)
{
this.seed = seed;
}
public int numEmpty()
{
int count = 0;
for(int i = 0; i < river.length; i++)
{
if(river[i] == null)
{
count++;
}
}
return count;
}
public boolean addRandom(Animal animal)
{
animal.age = 0;
for(int i = 0; i < river.length; i++)
{
if(river[i] == null)
{
river[i] = animal;
return true;
}
else
{
}
}
return false;
}
public void updateCell(int i)
{
int k = RandomSingleton.getInstance().nextInt(3);
//if k = 0, don't move; if k = 1, move left; if k = 2, move right.
Animal temp = river[i];
river[i] = null; //sets original position to null
if(temp == null)
{
}
else if(k == 0) //don't move
{
river[i] = temp;
}
else if(temp.toString().charAt(0) == 'B') //Bear
{
if(k == 1) //move left
{
if(i-1 >= 0)//not at beginning of river
{
if(river[i-1] == null)//if empty, just go
{
river[i-1] = temp;
}
else if(river[i-1].toString().charAt(0) == 'F')//fish dies regardless
{
river[i-1] = temp;
}
else if(river[i-1].toString().charAt(0) == 'B') //if bear
{
if(river[i-1].gender == temp.gender)//same gender
{
if(((Bear)river[i-1]).getStrength() == ((Bear)temp).getStrength())//same gender and strength
{
river[i] = temp; //do nothing
}
else if(((Bear)river[i-1]).getStrength() >= ((Bear)temp).getStrength())//same gender and strength
{
//Bear dies because not as strong
}
else
{
river[i-1] = temp;
}
}
else
{
addRandom(new Bear());
river[i] = temp;
}
}
else
{
}
}
else
{
if(river[length - 1] == null)
{
river[length - 1] = temp;
}
else if(river[length - 1].toString().charAt(0) == 'F')
{
river[length - 1] = temp;
}
else if(river[length-1].toString().charAt(0) == 'B')
{
if(river[length-1].gender == temp.gender)
{
if(((Bear)river[length-1]).getStrength() == ((Bear)temp).getStrength())//same gender and strength
{
river[i] = temp;
}
else if(((Bear)river[length-1]).getStrength() >= ((Bear)temp).getStrength())
{
//Bear dies because not as strong
}
else
{
river[length-1] = temp;
}
}
else
{
addRandom(new Bear());
river[i] = temp;
}
}
else
{
}
}
}
else
{
if(i+1 <= length - 1)
{
if(river[i+1] == null)
{
river[i+1] = temp;
}
else if(river[i+1].toString().charAt(0) == 'F')
{
river[i+1] = temp;
}
else if(river[i+1].toString().charAt(0) == 'B')
{
if(river[i+1].gender == temp.gender)
{
if(((Bear)river[i+1]).getStrength() == ((Bear)temp).getStrength())
{
river[i] = temp;
}
else if(((Bear)river[i+1]).getStrength() >= ((Bear)temp).getStrength())
{
//Bear dies because not as strong
}
else
{
river[i+1] = temp;
}
}
else
{
addRandom(new Bear());
river[i] = temp;
}
}
else
{
}
}
else
{
if(river[0] == null)
{
river[0] = temp;
}
else if(river[0].toString().charAt(0) == 'F')
{
river[0] = temp;
}
else if(river[0].toString().charAt(0) == 'B')
{
if(river[0].gender == temp.gender)
{
if(((Bear)river[0]).getStrength() == ((Bear)temp).getStrength())
{
river[i] = temp;
}
else if(((Bear)river[0]).getStrength() >= ((Bear)temp).getStrength())
{
//Bear dies because n
}
else
{
river[0] = temp;
}
}
else
{
addRandom(new Bear());
river[i] = temp;
}
}
else
{
}
}
}
}
else
{
if(k == 1)
{
if(i-1 >= 0)
{
if(river[i-1] == null)
{
river[i-1] = temp;
}
else if(river[i-1].toString().charAt(0) == 'B')
{
}
else if(river[i-1].toString().charAt(0) == 'F')
{
if(river[i-1].gender == temp.gender)
{
river[i] = temp;
}
else
{
addRandom(new Fish());
river[i] = temp;
}
}
else
{
}
}
else
{
if(river[length - 1] == null)
{
river[length - 1] = temp;
}
else if(river[length - 1].toString().charAt(0) == 'B')
{
}
else if(river[length-1].toString().charAt(0) == 'F')
{
if(river[length-1].gender == temp.gender)
{
river[i] = temp;
}
else
{
addRandom(new Fish());
river[i] = temp;
}
}
else
{
}
}
}
else
{
if(i+1 <= length - 1)
{
if(river[i+1] == null)
{
river[i+1] = temp;
}
else if(river[i+1].toString().charAt(0) == 'B')
{
}
else if(river[i+1].toString().charAt(0) == 'F')
{
if(river[i+1].gender == temp.gender)
{
river[i] = temp;
}
else
{
addRandom(new Fish());
river[i] = temp;
}
}
else
{
}
}
else
{
if(river[0] == null)
{
river[0] = temp;
}
else if(river[0].toString().charAt(0) == 'B')
{
}
else if(river[0].toString().charAt(0) == 'F')
{
if(river[0].gender == temp.gender)
{
river[i] = temp;
}
else
{
addRandom(new Fish());
river[i] = temp;
}
}
else
{
}
}
}
}
}
public void updateRiver()
{
for(int i = 0; i < length; i++)
{
updateCell(i);
}
for(int j = 0; j < length; j++)
{
if(river[j] != null)
{
if(river[j].incrAge() == false)
{
river[j] = null;
}
else
{
}
}
else
{
}
}
}
public void write(String outputFileName) throws FileNotFoundException
{
try
{
BufferedWriter printer = new BufferedWriter(new FileWriter(outputFileName));
String a = "";
for(int i = 0; i < length; i++)
{
if(river[i] == null)
{
a += "---";
}
else
{
a += river[i].toString();
}
a += " ";
}
printer.write(a);
printer.newLine();
printer.close();
}
catch(IOException e)
{
System.out.println("Sorry, this file does not exist, please try again.");
}
}
public String toString()
{
String representation = "";
for(int i = 0; i < length; i++)
{
if(river[i] == null)
{
representation += "---";
}
else
{
representation += river[i].toString();
}
representation += " ";
}
return representation;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.