如何显示toString中的所有信息
How to display all information in toString
我有两个 class:Position
和 Order
。在 Position
class 中,字段如:name
、price
。在 Order
class 字段中:quantity
。我的问题是如何在 Order
class 中一起显示:name
、price
和 quantity
。我考虑过删除数组列表并制作另一个具有位置和数量的数组,但我怀疑它是否对我有帮助。
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();
}
}
我有两个 class:Position
和 Order
。在 Position
class 中,字段如:name
、price
。在 Order
class 字段中:quantity
。我的问题是如何在 Order
class 中一起显示:name
、price
和 quantity
。我考虑过删除数组列表并制作另一个具有位置和数量的数组,但我怀疑它是否对我有帮助。
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();
}
}