En récursivité, une méthode s'appelle elle-même avec des données modifiées de l'appel d'origine. Ceci est fait jusqu'à ce qu'un cas de base soit atteint, dans lequel il n'est plus possible de modifier les données.
Dans votre cas, le cas de base est lorsque le tableau de caractères est composé d'un seul élément. Ce char sera la chaîne. Sinon c'est le premier élément avec le reste ajouté dans un appel récursif. La chaîne "Hello"
est 'H'
avec toFormattedString({'e','l','l','o'})
en annexe. Donc, si votre tableau char contient seulement un élément (length==1)
il suffit de retourner cet élément en tant que valeur de chaîne.
Sinon, prenez le premier élément et allez récursivement vers le tableau char restants sans le premier élément. Récursive jusqu'à ce qu'il ne reste plus qu'un élément.
public static String toFormattedString(char[] a)
{
if (a.length==1) return String.valueOf(a[0]);
else
return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)) ;
}
Vous pouvez même mettre le corps de la méthode dans une ligne illisible (non recommandé, je l'ai mentionné juste pour le plaisir):
return((a.length==1)?String.valueOf(a[0]):a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)));
MISE À JOUR: Un switch
-Déclaration donne un code lisible dans ce exemple:
public static String toFormattedString(char[] a)
{
switch (a.length)
{case 0 : return "";
case 1 : return String.valueOf(a[0]);
default: return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length));
}
}
Utilisation:
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(toFormattedString("Hello".toCharArray()));
}
Le compilateur ne montre aucune erreur? –
Il est. Mais cela ne m'aide pas à comprendre la racine du problème. :( – Daniel
Vous êtes également assez lit à l'orthographe :-) – paxdiablo