【发布时间】:2018-06-27 14:03:58
【问题描述】:
我在如何解决这个问题上遇到了一些问题。 我有一个 Boat 类,其中包含一个 toString() 和 getter 和 setter。 PowerBoat 类,它扩展了其超类的功能并覆盖了 toString() 方法。 SailBoat 类,它扩展了功能并覆盖了它的超类中的 toString() 方法。 在我的测试类中,我在船类型的 ArrayList 中添加了不同的 PowerBoats、SailBoats。 我需要找到最昂贵的船并打印关于该船的 toString() 信息。
public class Boat {
String color;
int length;
public Boat(){
color = "white";
length = 20;
}
public Boat(String color, int length){
setColor(color);
setLength(length);
}
public String getColor() {
return color;
}
public boolean setColor(String color) {
switch (color){
case "white" : this.color = color;
case "red" : this.color = color;
case "blue" : this.color = color;
case "yellow" : this.color = color;
return true;
}
return false;
}
public int getLength() {
return length;
}
public boolean setLength(int length) {
if(length >= 20 && length <= 50) {
this.length = length;
return true;
}
return false;
}
@Override
public String toString() {
return "Boat{" +
"color='" + color + '\'' +
", length=" + length +
'}';
}
}
public class PowerBoat extends Boat {
int engineSize;
public PowerBoat(){
super();
setEngineSize(5);
}
public PowerBoat(String color, int length, int engineSize){
super(color, length);
setEngineSize(engineSize);
}
public boolean setEngineSize(int engineSize){
if(engineSize >= 5 && engineSize <= 350){
this.engineSize = engineSize;
return true;
}
return false;
}
public int getEngineSize() {
return engineSize;
}
public int calcPrice(){
return 5000 + length + 300 + engineSize * 20;
}
@Override
public String toString() {
return super.toString() +
"engineSize= " + engineSize +
'}' + " Price " + calcPrice();
}
}
public class SailBoat extends Boat {
int numSails = 0;
public SailBoat(){
numSails = 1;
}
public SailBoat(String color, int length, int numSails){
super(color, length);
setNumSails(numSails);
}
public int getNumSails() {
return numSails;
}
public boolean setNumSails(int numSails) {
if(numSails >= 1 && numSails <= 4){
this.numSails = numSails;
return true;
}
return false;
}
public int calcPrice(){
return length * 1000 + numSails * 2000;
}
@Override
public String toString() {
return super.toString() +
"numSails= " + numSails +
'}' + " price " + calcPrice();
}
}
public class Inventory {
public static void main(String[] args){
ArrayList<Boat> list = new ArrayList();
Boat powerBoat = new PowerBoat("blue", 46, 60);
Boat powerBoat1 = new PowerBoat("yellow", 42, 55);
Boat sailBoat = new SailBoat("white", 32, 1);
Boat sailBoat1 = new SailBoat("red", 24, 2);
list.add(powerBoat);
list.add(powerBoat1);
list.add(sailBoat);
list.add(sailBoat1);
int sumSailBoat = 0;
int sumPowerBoat = 0;
int largest = Integer.MIN_VALUE;
for(Boat b : list){
if (b instanceof SailBoat){
sumSailBoat+= ((SailBoat) b).calcPrice();
if (((SailBoat) b).calcPrice() > largest){
if(b instanceof SailBoat) {
largest = ((SailBoat) b).calcPrice();
}
}
}
if (b instanceof PowerBoat){
sumPowerBoat+= ((PowerBoat) b).calcPrice();
if(((PowerBoat) b).calcPrice() > largest){
if(b instanceof PowerBoat){
largest = ((PowerBoat) b).calcPrice();
}
}
}
}
int totalSum = sumSailBoat + sumPowerBoat;
System.out.println("Total price of sail boats is " + sumSailBoat);
System.out.println("Total price of sail boats is " + sumPowerBoat);
System.out.println("Total price of sail and power boats is " + totalSum);
System.out.println("Most expensive boat is " + largest);
}
}
我设法找到了最高价格,但如何打印关于该船的 toString 信息?
【问题讨论】: