toString方法ArrayList简单递归

问题描述 投票:1回答:3

我试图递归地打印列表的内容,这是我应该得到的

[6, 8] but I am getting [8, 8 6, 6]

但是它的打印顺序错误,而且它本身也是重复的。

我对递归仍然很新,所以如果它听起来像一个基本问题,我道歉。这是我的方法:

private String toStringHelper (ArrayList<E> elements, int index, String ret){

  if(index>=elements.size())return ret;

  if (ret != null){ret +=  elements.get(index).toString() + ", ";}  
  ret += elements.get(index).toString() + " "; 

  return toStringHelper(elements, ++index, ret); 
}

我将如何在结构上修复它,以便输出我想要的方式?我的递归是否以相反的顺序打印出来?

java recursion arraylist tostring
3个回答
3
投票
  private String toStringHelper(ArrayList<E> elements, int index) {

    if (index >= elements.size())
      return "";
    String s = toStringHelper(elements, index + 1);
    if (index < elements.size() - 1)
      s += ", ";
    s += elements.get(index).toString();
    return s;
  }

希望它的工作!


3
投票

你想念我认为的其他人:

    if (ret == null) {
        ret = elements.get(index).toString() + ", ";
    } else {
        ret += elements.get(index).toString() + " ";
    }

0
投票

你实际上想避免使用那个ret论点;这只会使问题复杂化。为什么不去寻找类似的东西:

private String toStringHelper (ArrayList<E> elements, int index) {
  if(index>=elements.size()) {
    return ""; 
  }
  String trailingElements = toStringHelper(elements, ++index);
  if (trailingElements.isEmpty()) {
    return elements.get(index).toString();
  else {
    return elements.get(index).toString() + ", " + trailingElements;
  }

}

例如。

只是为了记录:当然可以在这里使用递归;但这是应该使用简单的for-each循环的示例之一;因为它更容易阅读;并以直截了当的方式完成工作。在这种情况下,该递归方法只能为您提供额外的复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.