我已经覆盖了类对象的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;理解为什么它不会以其他方式打印。
答案 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连接。