Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java Homework: Structural Recursion - A train. Write a set of classes that model

ID: 3699369 • Letter: J

Question

Java Homework: Structural Recursion - A train. Write a set of classes that model a train - starting with an abstract class called TrainCar as follows:

public abstract class TrainCar{

protected double itsDistanceFromHome;

protected TrainCar isNextConnectedCar;

public TrainCar(TrainCar nextCar){

itsNextConnectedCar = nextCar;

itsDistanceFromHome = 0.0;

public abstract void advance(double howFar);

public abstract Boolean isMemberOfValidTrain();

}

Using TrainCar, extend it into Engine, BoxCar, and Caboose with their own constructors and implementation of the advance and isMemberOfValidTrain methods. Then write a class Train that only knows about the Engine. A valid train consists of an engine followed by some number of BoxCars ending with a Caboose. Calling isMemberOfValidTrain on the Engine should return true if this actually is the setup and false if it is not. Calling advance(double) on the engine should advance the entire train.

Explanation / Answer

package engine;

public abstract class TrainCar{

protected double itsDistanceFromHome;

protected TrainCar isNextConnectedCar;

public TrainCar(TrainCar nextCar){

this.isNextConnectedCar = nextCar;

this.itsDistanceFromHome = 0.0;

}

public abstract void advance(double howFar);

public abstract Boolean isMemberOfValidTrain();

}

// 2.

package engine;

public class Engine extends TrainCar {

public Engine(TrainCar nextCar) {

super(nextCar);

}

@Override

public void advance(double howFar) {

super.itsDistanceFromHome+=this.itsDistanceFromHome;

}

@Override

public Boolean isMemberOfValidTrain() {

if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;

return false;

}

}

//3.

package engine;

public class BoxCar extends TrainCar {

public BoxCar(TrainCar nextCar) {

super(nextCar);

// TODO Auto-generated constructor stub

}

@Override

public void advance(double howFar) {

super.itsDistanceFromHome+=this.itsDistanceFromHome;

}

@Override

public Boolean isMemberOfValidTrain() {

if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;

return false;

}

?

?

}

//4.

package engine;

public class Caboose extends TrainCar {

public Caboose(TrainCar nextCar) {

super(nextCar);

// TODO Auto-generated constructor stub

}

@Override

public void advance(double howFar) {

super.itsDistanceFromHome+=this.itsDistanceFromHome;

}

@Override

public Boolean isMemberOfValidTrain() {

if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;

return false;

}

?

}

//5.

package engine;

public class Train {

Engine engine;

public Engine getEngine() {

return engine;

}

public void setEngine(Engine engine) {

this.engine = engine;

}

}

//6.

package engine;

public class Test {

public static void main(String[] args) {

TrainCar tc=null;

Train t=new Train();

TrainCar tc1= new TrainCar(tc) {

@Override

public void advance(double howFar) {

super.itsDistanceFromHome+=this.itsDistanceFromHome;

}

@Override

public Boolean isMemberOfValidTrain() {

if(this.isNextConnectedCar.equals(super.isNextConnectedCar)) return true;

return false;

}

};

t.setEngine(new Engine(tc1));

boolean var= t.engine.isMemberOfValidTrain();

System.out.println(var);

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote