Skip to content

Commit cdaa2e0

Browse files
authored
Needs code refactoring
Patched it up - wrote in a hurry.
1 parent e859d63 commit cdaa2e0

File tree

5 files changed

+259
-0
lines changed

5 files changed

+259
-0
lines changed

Diff for: Courses/05. Polymorphism/Exercise/Main.java

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import vehicle.Bus;
2+
import vehicle.Car;
3+
import vehicle.Truck;
4+
import vehicle.Vehicle;
5+
6+
import java.util.*;
7+
8+
public class Main {
9+
10+
public static void main(String[] args) {
11+
Scanner scanner = new Scanner(System.in);
12+
13+
Map<String, Vehicle> vehicles = new HashMap<>();
14+
15+
String[] split = scanner.nextLine().split("\\s+");
16+
try {
17+
Vehicle car = new Car(Double.parseDouble(split[1]), Double.parseDouble(split[2]), Double.parseDouble(split[3]));
18+
vehicles.put("Car", car);
19+
} catch (IllegalArgumentException e) {
20+
System.out.println(e.getMessage());
21+
}
22+
split = scanner.nextLine().split("\\s+");
23+
try {
24+
Vehicle truck = new Truck(Double.parseDouble(split[1]), Double.parseDouble(split[2]), Double.parseDouble(split[3]));
25+
vehicles.put("Truck", truck);
26+
} catch (IllegalArgumentException e) {
27+
System.out.println(e.getMessage());
28+
}
29+
split = scanner.nextLine().split("\\s+");
30+
try {
31+
Vehicle bus = new Bus(Double.parseDouble(split[1]), Double.parseDouble(split[2]), Double.parseDouble(split[3]));
32+
vehicles.put("Bus", bus);
33+
} catch (IllegalArgumentException e) {
34+
System.out.println(e.getMessage());
35+
}
36+
37+
int n = Integer.parseInt(scanner.nextLine());
38+
39+
while (n-- > 0) {
40+
String[] elements = scanner.nextLine().split("\\s+");
41+
String action = elements[0];
42+
String vehicle = elements[1];
43+
Double value = Double.parseDouble(elements[2]);
44+
45+
if ("Car".equals(vehicle)) {
46+
if ("Refuel".equals(action)) {
47+
try {
48+
vehicles.get("Car").refuel(value);
49+
} catch (IllegalArgumentException e) {
50+
System.out.println(e.getMessage());
51+
}
52+
} else{
53+
try {
54+
vehicles.get("Car").drive(value);
55+
} catch (IllegalArgumentException e) {
56+
System.out.println(e.getMessage());
57+
}
58+
}
59+
} else if ("Truck".equals(vehicle)) {
60+
if ("Refuel".equals(action)) {
61+
try {
62+
vehicles.get("Truck").refuel(value);
63+
} catch (IllegalArgumentException e) {
64+
System.out.println(e.getMessage());
65+
}
66+
} else{
67+
try {
68+
vehicles.get("Truck").drive(value);
69+
} catch (IllegalArgumentException e) {
70+
System.out.println(e.getMessage());
71+
}
72+
}
73+
} else {
74+
if ("Refuel".equals(action)) {
75+
try {
76+
vehicles.get("Bus").refuel(value);
77+
} catch (IllegalArgumentException e) {
78+
System.out.println(e.getMessage());
79+
}
80+
} else if("Drive".equals(action)){
81+
try {
82+
vehicles.get("Bus").driveFull(value);
83+
} catch (IllegalArgumentException e) {
84+
System.out.println(e.getMessage());
85+
}
86+
}else{
87+
try {
88+
vehicles.get("Bus").drive(value);
89+
} catch (IllegalArgumentException e) {
90+
System.out.println(e.getMessage());
91+
}
92+
}
93+
94+
}
95+
96+
}
97+
98+
System.out.println(vehicles.get("Car").toString());
99+
System.out.println(vehicles.get("Truck").toString());
100+
System.out.println(vehicles.get("Bus").toString());
101+
}
102+
103+
104+
}

Diff for: Courses/05. Polymorphism/Exercise/vehicle/Bus.java

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package vehicle;
2+
3+
public class Bus extends Vehicle {
4+
5+
public Bus(Double fuelQuantity, Double fuelConsumption, Double tankCapacity) {
6+
super(fuelQuantity, fuelConsumption, 0.0, tankCapacity);
7+
}
8+
9+
@Override
10+
public void drive(Double km) {
11+
super.drive(km);
12+
}
13+
14+
@Override
15+
public void driveFull(Double km) {
16+
super.setFuelConsumption(super.getFuelConsumption(), 1.4);
17+
super.drive(km);
18+
}
19+
20+
@Override
21+
public void refuel(Double liters) {
22+
if(liters <= 0){
23+
throw new IllegalArgumentException("Fuel must be a positive number");
24+
}
25+
super.setFuelQuantity(super.getFuelQuantity(), liters);
26+
}
27+
}

Diff for: Courses/05. Polymorphism/Exercise/vehicle/Car.java

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package vehicle;
2+
3+
public class Car extends Vehicle {
4+
5+
private static final Double EXTRA_CONSUMPTION = 0.9;
6+
7+
public Car(Double fuelQuantity, Double fuelConsumption, Double tankCapacity) {
8+
super(fuelQuantity, fuelConsumption, EXTRA_CONSUMPTION, tankCapacity); // extraConsumption is set to 1.6 for the car
9+
}
10+
11+
12+
@Override
13+
public void drive(Double km) {
14+
super.drive(km);
15+
}
16+
17+
@Override
18+
public void driveFull(Double km) {
19+
super.driveFull(km);
20+
}
21+
22+
@Override
23+
public void refuel(Double liters) { // rework
24+
if(liters <= 0){
25+
throw new IllegalArgumentException("Fuel must be a positive number");
26+
}
27+
super.setFuelQuantity(super.getFuelQuantity(), liters);
28+
}
29+
}

Diff for: Courses/05. Polymorphism/Exercise/vehicle/Truck.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package vehicle;
2+
3+
public class Truck extends Vehicle {
4+
5+
private static final Double EXTRA_CONSUMPTION = 1.6;
6+
7+
public Truck(Double fuelQuantity, Double fuelConsumption, Double tankCapacity) {
8+
super(fuelQuantity, fuelConsumption, EXTRA_CONSUMPTION, tankCapacity); // extraConsumption is set to 1.6 for the car
9+
}
10+
11+
@Override
12+
public void drive(Double km) {
13+
super.drive(km);
14+
}
15+
16+
@Override
17+
public void driveFull(Double km) {
18+
super.driveFull(km);
19+
}
20+
21+
@Override
22+
public void refuel(Double liters) {// rework
23+
if (liters <= 0) {
24+
throw new IllegalArgumentException("Fuel must be a positive number");
25+
}
26+
super.setFuelQuantity(super.getFuelQuantity(), (liters - (liters * 0.05)));
27+
}
28+
}
+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package vehicle;
2+
3+
import java.text.DecimalFormat;
4+
5+
public abstract class Vehicle {
6+
private Double fuelQuantity;
7+
private Double fuelConsumption; //litres per km
8+
private Double tankCapacity;
9+
10+
protected Vehicle(Double fuelQuantity, Double fuelConsumption, Double extraConsumption, Double tankCapacity) {
11+
setTankCapacity(tankCapacity);
12+
setFuelConsumption(fuelConsumption, extraConsumption);
13+
setFuelQuantity(fuelQuantity,0.0);
14+
}
15+
16+
private Double getTankCapacity() {
17+
return tankCapacity;
18+
}
19+
20+
protected void setTankCapacity(Double tankCapacity) {
21+
if (tankCapacity <= 0) {
22+
throw new IllegalArgumentException("Fuel must be a positive number");
23+
}
24+
25+
this.tankCapacity = tankCapacity;
26+
}
27+
28+
public void drive(Double km) {
29+
Double fuelNeeded = km * getFuelConsumption();
30+
31+
if (fuelNeeded <= getFuelQuantity()) {
32+
DecimalFormat df = new DecimalFormat("0.##");
33+
System.out.println(String.format("%s travelled %s km", getClass().getSimpleName(), df.format(km)));
34+
setFuelQuantity(getFuelQuantity() - fuelNeeded,0.0);
35+
} else {
36+
System.out.println(getClass().getSimpleName() + " needs refueling");
37+
}
38+
}
39+
40+
public void driveFull(Double km){
41+
this.drive(km);
42+
}
43+
44+
public void refuel(Double liters){};
45+
46+
protected Double getFuelQuantity() {
47+
return this.fuelQuantity;
48+
}
49+
50+
protected void setFuelQuantity(Double fuelQuantity, Double litres) {
51+
if (this.fuelQuantity != null) {
52+
if (litres + getFuelQuantity() > getTankCapacity()) {
53+
throw new IllegalArgumentException("Cannot fit fuel in tank");
54+
}
55+
}
56+
this.fuelQuantity = fuelQuantity + litres;
57+
}
58+
59+
protected Double getFuelConsumption() {
60+
return this.fuelConsumption;
61+
}
62+
63+
protected void setFuelConsumption(Double fuelConsumption, Double extraConsumption) {
64+
this.fuelConsumption = fuelConsumption + extraConsumption;
65+
}
66+
67+
@Override
68+
public String toString() {
69+
return String.format("%s: %.2f", getClass().getSimpleName(), getFuelQuantity());
70+
}
71+
}

0 commit comments

Comments
 (0)