2017-03-16 8 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

を入力してください。こんにちは、[8,6、] – 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

を追加しました。出力は「6,8」 – emmynaki

+0

が変更されました。詳細については、 – 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ループを使用すべき例の1つです。それは読むのがはるかに簡単です。仕事をまっすぐに進めています。この場合、その再帰的メソッドはには何も与えません。しかしさらにの複雑さを与えます。

関連する問題