Java 如何在toString中使用循环?
我需要打印商店的名称(此方法在shop类中)、产品名称(这是一个arraylist)和产品的价格(这是使用product类中的getter完成的)。我想循环遍历arraylist中的所有产品,我如何才能做到这一点 请如果有什么不清楚的评论它,我会编辑的问题,使它更清楚Java 如何在toString中使用循环?,java,Java,我需要打印商店的名称(此方法在shop类中)、产品名称(这是一个arraylist)和产品的价格(这是使用product类中的getter完成的)。我想循环遍历arraylist中的所有产品,我如何才能做到这一点 请如果有什么不清楚的评论它,我会编辑的问题,使它更清楚 public String toString() { for(int i=0; i<products.size();i++) { return "Shop"+"["+"name"+" = "
public String toString()
{
for(int i=0; i<products.size();i++)
{
return "Shop"+"["+"name"+" = "+name+","+"Product name"+" = "+products.get(i).getName()+", "+"Price"+" = "+products.get(i).getPrice()+"]";
}
return null;
}
公共字符串toString()
{
对于(int i=0;i使用StringBuilder
:
public String toString() {
StringBuilder sb = new StringBuilder("Shop").append("[name = ").append(name)
for (Product product : products) {
sb.append(",")
.append("Product name = ").append(product.getName())
.append(", Price = ").append(product.getPrice())
.append("]");
}
return sb.toString();
}
注:
不要在循环中使用+
来连接字符串(正如接受的答案所做的那样),因为它会在每次迭代中创建一个stringbuilder来连接字符串,然后将其附加到外部stringbuilder。使用return
语句将结束函数的执行。下面是您要执行的操作
public String toString()
{
StringBuilder result = new StringBuilder();
result.append("Shop [ name = "+name+" ");
for(Product p : products)
{
result.append("Product name"+" = "+p.getName()+", "+"Price"+" = "+p.getPrice()+" ");
}
result.append("]");
return result.toString();
}
您可以使用它来构建对象toString()。他们最近将其更改为MoreObjects.ToStringHelper
public String toString(){
ToStringHelper toStringHelper = MoreObjects.toStringHelper(this);
for (Product p : products)
{
toStringHelper.add("name", p.name);
toStringHelper.add("Product name", p.getName();
}
return toStringHelper.toString();
}
您可以使用StringJoiner()
如果您有一个小的集合,那么您总是可以将字符串与+连接起来
创建StringBuilder为小示例提供了不必要的开销
除此之外,如果这部分代码能够提高性能,编译器将对其进行优化
public String toString() {
String str = "Shop [name = " + name + " ";
for (Product product : products) {
str += ", Product name = " + product.getName();
str += ", Price = " + product.getPrice() + "]";
}
return str;
}
不要在循环内返回值。使用StringBuilder并将字符串附加到它。在循环后返回字符串。您需要将结果存储在变量中并返回它,因为在循环中返回将导致它在第一次运行时终止,正如您所提到的。您正在循环内打印商店名称,这看起来不太好。它成功了,非常感谢,但是你能解释一下for(产品p:products)是什么意思吗?因为我是新来的,我知道的不多。谢谢请注意,Java规范建议字符串的+运算符应该在编译时作为StringBuilder处理,这可能会使您的参数变得毫无意义。
public String toString() {
String str = "Shop [name = " + name + " ";
for (Product product : products) {
str += ", Product name = " + product.getName();
str += ", Price = " + product.getPrice() + "]";
}
return str;
}