如何显示toString中的所有信息

How to display all information in toString

我有两个 class:PositionOrder。在 Position class 中,字段如:nameprice。在 Order class 字段中:quantity。我的问题是如何在 Order class 中一起显示:namepricequantity。我考虑过删除数组列表并制作另一个具有位置和数量的数组,但我怀疑它是否对我有帮助。

package programming.com.pl;

public class Position  {

private String name;
private double price = 0;


public Position(String name, double price){
    this.name = name;
    this.price = price;
}

public double getPrice() {
    return price;
}

public String toString(){
    String str = String.format("%4s,%4s", name,price);
    return  str;
}
}

public class Order {
private int quantity;
final private ArrayList<Position> positions = new ArrayList<Position>();
private int addedPosition;


public Order(int quantity) {
    this.quantity = quantity;
}

private double calculateProduct() {
    double sum = 0;
    for (int i = 0; i < positions.size(); i++) {
        sum = positions.get(i).getPrice();
    }
    return sum;
}

double sumOrder() {
    double sum = 0;
    for (Position x : positions) {
        sum += calculateProduct();
    }
    return sum;
}


void addPosition(Position p) {
    if (!positions.contains(p)) {
        positions.add(p);
    } else {
        quantity++;
    }
}

void deletePosition(int index) {
    positions.remove(index);
}


public String toString() {
    System.out.println("Order is: ");
    for (Position p : positions) {
        System.out.println(positions.toString());
    }
    return "Order sum is: " + sumOrder();
}
}

您已经覆盖了 Position class 中的 toString 方法,因此您只需要在从内部迭代位置对象时调用位置对象上的 toString 方法你的 Order class' toString() 方法。

正如@Federico 在评论中指出的那样,您不应该从 toString 方法中 System.out.println。只需将您需要显示的详细信息附加到字符串,然后 return 该字符串。

您可以像这样实现您想要的结果:

public class Position {
    .
    .
    @Override
    public String toString() {
        return String.format("%4s,%4s\n", name, price);
    }
}

public class Order {
    .
    .
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("Order details: \n");
        sb.append("Quantity: ").append(quantity).append("\n");
        for (Position p : positions) {
            sb.append(p);
        }
        sb.append("Order sum is: ").append(sumOrder());
        return sb.toString();
    }
}