toString方法ArrayList简单递归

时间:2017-03-16 14:28:54

标签: java recursion arraylist tostring

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

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

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

3 个答案:

答案 0 :(得分:3)

你想念别人我想:

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

答案 1 :(得分: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;
  }

希望它的工作!

答案 2 :(得分: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循环的示例之一;因为它更容易阅读;并以直截了当的方式完成工作。在这种情况下,该递归方法为您提供 nothing 其他复杂性。