我不能做System.out.println(Item.toString());?

时间:2015-10-04 15:04:39

标签: java string printing

我已经覆盖了类对象的toString方法,但我的方法不起作用,我无法弄清楚原因。这是我的方法的代码(在一个名为ShoppingBag的类中):

public String toString(){ 
    String str = ""; 
    Item temp = record;  
    str += "\n\nThe bag contains:\n"; 
    str += String.format("%-18s%-13s%-12s\n", "Name of the Items", "Quantity", "Subtotal"); 
    while(temp != null){ 
        str += String.format("%-18s%-13s%-12s\n", temp.getItemName(), temp.getQuantity(),
           "$"+(temp.getRetailPrice()*temp.getQuantity()));
    }
    str += String.format("%-18s%-13s%-12s\n", "", "Total:", "$"+this.totalCost()); 
    str += String.format("%-18s%-13s%-12s\n", "", "Tax(5%):", "$"+(this.totalCost()
          * taxRate)); 
    str += String.format("%-18s%-13s%-12s\n", "", "Grand Total:", "$"+this.totalCost()
          +(this.totalCost()*taxRate)); 
    String test = "test1";
    return test;
}

我知道那里有很多带有Item和String.format的垃圾。我编译或运行时没有例外,它只是没有打印任何东西。

在我的申请中,我试试这个:

ShoppingBag bag = new ShoppingBag(parameters);
System.out.println(bag.toString());

并且没有打印。当我注释掉除了方法的最后两行(String test = "test1"; return test;)以外的所有内容时,它会打印" test1",但是其他文本块不应该影响测试变量,所以我不要& #39;理解为什么它不会以其他方式打印。

1 个答案:

答案 0 :(得分:5)

没有打印因为你陷入无限循环;这一个:

while(temp != null){ 
    str += String.format("%-18s%-13s%-12s\n", temp.getItemName(), temp.getQuantity(), "$"+(temp.getRetailPrice()*temp.getQuantity()));
}

temp永远不会null,所以你永远不会脱离那个循环。

这就是为什么当你删除这些行时,它开始工作(你删除无限循环)。您应该删除while循环。你可能意味着它是一个if语句(避免NullPointerException)。回顾一下,您可能需要if (temp != null)而不是while (temp != null)tutorial on while语句,tutorial on if语句。)

另外,请考虑使用StringBuilder而不是所有String连接。