Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在toString中使用循环?_Java - Fatal编程技术网

Java 如何在toString中使用循环?

Java 如何在toString中使用循环?,java,Java,我需要打印商店的名称(此方法在shop类中)、产品名称(这是一个arraylist)和产品的价格(这是使用product类中的getter完成的)。我想循环遍历arraylist中的所有产品,我如何才能做到这一点 请如果有什么不清楚的评论它,我会编辑的问题,使它更清楚 public String toString() { for(int i=0; i<products.size();i++) { return "Shop"+"["+"name"+" = "

我需要打印商店的名称(此方法在shop类中)、产品名称(这是一个arraylist)和产品的价格(这是使用product类中的getter完成的)。我想循环遍历arraylist中的所有产品,我如何才能做到这一点

请如果有什么不清楚的评论它,我会编辑的问题,使它更清楚

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;
}