## Need a hint.

I am curently working on a program what simulates boats moving on a lake, there are rules that apply to different boats. I need to get the distance from one boat to another, check if the closest boat is a certain kind of boat and follow the rules given for that boat. My problem is that I am not sure where I should put the method that would calculate the closest boat and its type (Sail\Motor), by where I mean Either main method of the program , or the superclass from which the different boatclasses are being extended.

Here is what I got so far:

Code:
```class boatprogram5{

static int numboats=4;

static boatclass boat[]=new boatclass[numboats+1];

public static void main(String[]args){

boatclass boat0=new sailboatclass(1.6,0.3,1.1,10.4,35,false,65);
boat[1]=boat0;
boat0=new motorboatclass(30.5,10.8,-5.2,-1.4,18,25);
boat[2]=boat0;
boat0=new sailboatclass(3.8,2.4,7.2,-4.9,30,true,120);
boat[3]=boat0;
boat0=new motorboatclass(7.4,14.8,0.2,8.6,12,16);
boat[4]=boat0;

double time=0;
double deltatime=2.0;

while(time<=10.0){
System.out.println("Time: "+cpj.nf(time,7,2));

for(int i=1;i<=numboats;i++){
double nearestdistance=Double.MAX_VALUE;
for(int j=1;j<=numboats;j++){
if(i!=j){
if(boat[i].distance(boat[j])<nearestdistance){
nearestdistance=boat[i].distance(boat[j]);
boat[i].nearestboat=boat[j];
}
}
}
System.out.println("Boat "+i+" is at "+boat[i].positionstring());
System.out.println("   nearest boat is at "+boat[i].nearestboat.positionstring());
System.out.print("   distance: "+cpj.nf(boat[i].nearestdistance(),7,2));
String nearestboattype="";
if(boat[i].nearestboat instanceof sailboatclass)
{nearestboattype=" Sailboat";}
if(boat[i].nearestboat instanceof motorboatclass)
{nearestboattype=" Motorboat";}
System.out.println("   type="+nearestboattype);
}

time+=deltatime;

for(int i=1;i<=numboats;i++){
boat[i].moveboat(deltatime);
}
}
}
}

abstract class boatclass{
double x=0;
double y=0;
double vx=0;
double vy=0;

boatclass nearestboat;

public boatclass(double x,double y,double vx,double vy){
this.x=x; this.y=y;
this.vx=vx; this.vy=vy;
}

void moveboat(double deltatime){
x+=deltatime*vx;
y+=deltatime*vy;
}
void stop(){
vy=0;
vx=0;
}

double distance(boatclass otherboat){
double z=Math.sqrt(Math.pow((x-otherboat.x),2)+Math.pow((y-otherboat.y),2));
return z;
}

double nearestdistance() {
if(distance(nearestboat)<=3){
stop();
System.out.println(" Boat has stopped stopped");

}
return distance(nearestboat);
}

String positionstring(){
return("x ="+cpj.nf(x,7,2)+" y ="+cpj.nf(y,7,2));
}
}

class sailboatclass extends boatclass{

private int mastheight=0;
boolean sailsfurled=false;
double saildirection=0;

public sailboatclass(double x,double y,double vx,double vy, int mastheight, boolean sailsfurled,double saildirection){
super(x,y,vx,vy);
this.mastheight=mastheight;
this.sailsfurled=sailsfurled;
this.saildirection=saildirection;
}
}

class motorboatclass extends boatclass{
double fuellevel=0;
private double fueltanksize=0;

public motorboatclass(double x,double y,double vx,double vy,double fuellevel,double fueltanksize){
super(x,y,vx,vy);
this.fuellevel=fuellevel;
this.fueltanksize=fueltanksize;
}
}```