-2
votes

La nouvelle arrayliste a créé chaque fonction de temps est appelée récursivement

Je convertissez une chaîne en arraylist de caractère récursivement. Une nouvelle arrayliste est créée chaque fois que la fonction est appelée.

public static ArrayList<Character> strToList(String word)
{
    ArrayList<Character> letters = new ArrayList<Character>();
    //ArrayList<Character> emptyList = new ArrayList<Character>();
    if(word.isEmpty() == true){
        return letters;        
    }
    else {
        char let = word.charAt(0);
        letters.add(Character.valueOf(let));
        System.out.println(letters);
        String temp = word.substring(1, word.length());
        System.out.println(temp);
        return strToList(temp);
    }
}


5 commentaires

Pensez-vous que static est le coupable :)?


Quelle est ta question? S'il vous plaît Modifier Votre message.


Oui, parce que chaque fois ce ArrayList lettres = nouvelle arrayliste (); est appelé


Définir l'arrayliste comme statique.


Oui, c'est ce que votre code dit: Créez une nouvelle liste. Mais quelle est votre question?


3 Réponses :


2
votes

transmettez un seul instance d'arraylist code> comme argument sur votre méthode ( Strtoliste statique public public (String Word, liste lettres) code> - Votre méthode ne fonctionne pas Doit rien retourner dans ce cas) ou fusionner les instances code> ArrayList Code> comme suit:

public static ArrayList<Character> strToList(String word)
{
    ArrayList<Character> letters = new ArrayList<Character>();
    if (!word.isEmpty()) {
        char let = word.charAt(0);
        letters.add(Character.valueOf(let));
        System.out.println(letters);
        String temp = word.substring(1, word.length());
        System.out.println(temp); 
        letters.addAll(strToList(temp)); // add all the elements of the List returned by the
                                         // recursive call to the new List created in this 
                                         // call
    }
    return letters;
}


0 commentaires

1
votes

Mise à jour de votre code comme ci-dessous

    public static ArrayList<Character> strToList(String word, ArrayList<Character> letters)
    {
//        ArrayList<Character> letters = new ArrayList<Character>();
        //ArrayList<Character> emptyList = new ArrayList<Character>();
        if(word.isEmpty() == true){
            return letters;
        }
        else {
            char let = word.charAt(0);
            letters.add(Character.valueOf(let));
            System.out.println(letters);
            String temp = word.substring(1, word.length());
            System.out.println(temp);
            return strToList(temp, letters);
        }
    }
    public static void main(String[] args) throws Exception {
        ArrayList<Character> letters = new ArrayList<Character>();
        System.out.println(strToList("Hello", letters)); // [H, e, l, l, o]

}


2 commentaires

Merci, mais je veux éviter de modifier les paramètres de la fonction.


Alors c'est la meilleure réponse appropriée: Stackoverflow.com/a/56124086/2987755 , je ne voulais pas changer la logique de votre fonction, alors ajouté cette version comme réponse



0
votes

Vous pouvez également faire cela de cette manière

[H, e, l, l, o]


0 commentaires