toString方法ArrayList简单递归

toString Method ArrayList simple recursion

我正在尝试递归打印列表的内容,这就是我应该得到的

[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); 
}

我如何在结构上对其进行修复,使其按照我想要的方式输出?我的递归是否以相反的顺序打印它?

你错过了我认为的其他:

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

你实际上想避免使用那个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 循环的示例之一;因为它更容易阅读;并以直接的方式完成工作。在这种情况下,递归方法给你没有额外复杂性。

  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;
  }

希望它的工作!