2017-03-16 4 views
1

내가 재귀 목록의 내용을 인쇄하려고이 내가toString 방법 ArrayList의 간단한 재귀

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

어떻게 구조적으로 고쳐서 원하는대로 출력 할 수 있습니까? 내 재귀가 역순으로 인쇄합니까? 당신은 다른 그리워

+0

[mcve] – Jens

+0

을 제공해주세요. 안녕하세요. – emmynaki

답변

1
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

에 [8, 6,]이 (가) 인쇄되었습니다. – emmynaki

+0

내 anser를 변경했습니다. 출력은'6, 8'입니다. – Jens

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 루프가 사용되어야하는 예제 중 하나입니다; 읽기가 훨씬 쉬워졌습니다. 직선적 인 방식으로 일을합니다. 이 경우 재귀 적 방법은 이 아니며이지만 이됩니다.