
Here's an implementation of the GrilledRumpSteak class with the required features:
```java
public class GrilledRumpSteak {
private String size;
private int salsaToppings;
private int tomatoToppings;
private int mushroomToppings;
public GrilledRumpSteak(String size, int salsaToppings, int tomatoToppings, int mushroomToppings) {
this.size = size;
this.salsaToppings = salsaToppings;
this.tomatoToppings = tomatoToppings;
this.mushroomToppings = mushroomToppings;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public int getSalsaToppings() {
return salsaToppings;
}
public void setSalsaToppings(int salsaToppings) {
this.salsaToppings = salsaToppings;
}
public int getTomatoToppings() {
return tomatoToppings;
}
public void setTomatoToppings(int tomatoToppings) {
this.tomatoToppings = tomatoToppings;
}
public int getMushroomToppings() {
return mushroomToppings;
}
public void setMushroomToppings(int mushroomToppings) {
this.mushroomToppings = mushroomToppings;
}
public double calcCost() {
double cost;
switch (size) {
case "Large":
cost = 200 + salsaToppings * 30 + tomatoToppings * 30 + mushroomToppings * 30;
break;
case "Medium":
cost = 150 + salsaToppings * 20 + tomatoToppings * 20 + mushroomToppings * 20;
break;
default:
cost = 120 + salsaToppings * 15 + tomatoToppings * 15 + mushroomToppings * 15;
}
return cost;
}
public String getDescription() {
return size + " rump with " + salsaToppings + " salsa toppings, " + tomatoToppings + " tomato toppings, and " + mushroomToppings + " mushroom toppings";
}
}
```
And here's an implementation of the GrilledRumpSteakOrder class that allows up to three grilled rump steaks to be saved in order:
```java
public class GrilledRumpSteakOrder {
private GrilledRumpSteak[] rumpSteaks;
private int count;
public GrilledRumpSteakOrder() {
rumpSteaks = new GrilledRumpSteak[3];
count = 0;
}
public void addRumpSteak(GrilledRumpSteak rumpSteak) {
if (count < 3) {
rumpSteaks[count] = rumpSteak;
count++;
}
}
public double calcTotal() {
double total = 0;
for (int i = 0; i < count; i++) {
total += rumpSteaks[i].calcCost();
}
return total;
}
}
```
To test the classes, we can create several GrilledRumpSteak objects and output their descriptions, then create a GrilledRumpSteakOrder object, add the rump steaks to it, and calculate the total cost of the order:
```java
public static void main(String[] args) {
GrilledRumpSteak rump1 = new GrilledRumpSteak("Large", 1, 1, 2);
GrilledRumpSteak rump2 = new GrilledRumpSteak("Medium", 2, 0, 1);
GrilledRumpSteak rump3 = new GrilledRumpSteak("Small", 0, 3, 0);
System.out.println(rump1.getDescription()); // Output: Large rump with 1 salsa toppings, 1 tomato toppings, and 2 mushroom toppings
System.out.println(rump2.getDescription()); // Output: Medium rump with 2 salsa toppings, 0 tomato toppings, and 1 mushroom toppings
System.out.println(rump3.getDescription()); // Output: Small rump with 0 salsa toppings, 3 tomato toppings, and 0 mushroom toppings
GrilledRumpSteakOrder order = new GrilledRumpSteakOrder();
order.addRumpSteak(rump1);
order.addRumpSteak(rump2);
order.addRumpSteak(rump3);
System.out.println("Total cost: R" + order.calcTotal());