我有三个不同的程序,彼此都读入。一种方法为单个对象创建toString方法,第二种方法在具有单个对象列表的文件中读取,第三种方法创建另一个调用第一个方法的toString方法,并为第二个方法创建一个toString。信息多次打印,我无法弄清楚原因。 iList是一个包含各种对象的数组列表。我得到的输出是正确的,但它只是打印四次而不是一次。
第一个程序中的toString方法:
public String toString() {
NumberFormat dollarFmt = NumberFormat.getCurrencyInstance();
DecimalFormat percentFmt = new DecimalFormat("#.0%");
String output = "\nDescription: " + description.trim();
output += "\nCost: " + dollarFmt.format(cost);
output += " Percent Depreciation: "
+ percentFmt.format(percentDepreciated);
output += "\nCurrent Value: "
+ dollarFmt.format(cost - (cost * percentDepreciated));
if (isEligibleToScrape()) {
output += "\n*** Eligible to scrape ***";
}
if (percentDepreciatedOutOfRange()) {
output += "\n*** Percent Depreciated appears to be out of range ***";
}
}
第三个程序中的toString方法:
public String toString() {
String output = ("\n" + inventoryName + "\n");
int index = 1;
while (index < iList.size()) {
output += (iList.toString());
index++;
}
return output;
}
在第二个程序中调用第三个程序的toString:
Inventory myInventoryList
= new Inventory(inventoryName, inventoryList);
System.out.println(myInventoryList.toString());
答案 0 :(得分:0)
您多次向输出添加iList.toString()
:
while (index < iList.size()) {
output += (iList.toString());
index++;
}
这就是它多次打印的原因。
我不知道iList
的类型是什么,但它看起来像是某种列表,所以你可能想要添加一个元素的String表示列表中的每个迭代的输出(而不是每次的整个列表)。
由于iList
是一个ArrayList,您需要将循环更改为:
int index = 0;
while (index < iList.size()) {
output += iList.get(index).toString();
index++;
}
或者:
for (int i=0; i<iList.size();i++)
output += iList.get(i).toString();
当然最好将输出附加到StringBuilder而不是在每次迭代中创建一个新的String。
答案 1 :(得分:0)
这样做:output += (iList.get(index).toString());
答案 2 :(得分:0)
更改此
while (index < iList.size()) {
output += (iList.toString());
index++;
}
之类的(假设iList
是List
)
while (index < iList.size()) {
output += iList.get(index); // <-- toString() is implicit here
index++;
}
将get(int)
要打印的单个项目(而不是每次打印整个List
)和(隐式)调用toString()
(您已经覆盖)。