为什么我的方法打印多次?

时间:2014-10-02 18:03:24

标签: java arraylist

我有三个不同的程序,彼此都读入。一种方法为单个对象创建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());

3 个答案:

答案 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++;
}

之类的(假设iListList

while (index < iList.size()) {
  output += iList.get(index); // <-- toString() is implicit here  
  index++;
}

get(int)要打印的单个项目(而不是每次打印整个List)和(隐式)调用toString()(您已经覆盖)。