En cherchant à renvoyer le nombre de fois dans un tableau de caractères, le char ':' est suivi du char ')' en utilisant la récursivité.
public static int countSmiles(String numbers) { if (numbers.length() == 0) return 0; if (numbers.charAt(0) == ':'&& numbers.charAt(1)==')') return 1 + countSmiles(numbers.substring(1)); return countSmiles(numbers.substring(1)); }
Je m'attends à ce que la sortie soit 2.
J'ai pu le faire avec succès en utilisant une chaîne (voir ci-dessous) mais je n'ai pas pu le faire avec le tableau char.
public class Recursion { public static int countSmiles(char[] numbers) { if (numbers.length == 0) return 0; if(String.valueOf(numbers[0])== ":" && String.valueOf(numbers[1])==")") return 1 + countSmiles(numbers[1]); return countSmiles(numbers[1]); } public static void main (String[] args) { char[] s = {'n','g', ':' ,')', ':' ,')'}; System.out.println(countSmiles(s)); } }
4 Réponses :
nombres [1]
vous donnera le deuxième caractère et le compilateur vous dira que l'argument n'est pas correct, car un chars []
est attendu et vous venez de donner il char
. Vous devez créer un sous-tableau Arrays.copyOfRange et le passer dans countSmiles
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length - 1));
Cependant, pour plus d'éléments, vous devrez garder le compteur du nombre d'éléments que vous avez ignorés jusqu'à présent et l'utiliser au lieu de 1.
nombres [1]
est juste un seul caractère et non le tableau entier sans le premier caractère. Pour cela, vous pouvez utiliser Arrays.copyOfRange (numbers, 1, numbers.length)
.
En plus de ce que les gens ont dit à propos de Code de travail: Arrays.copyOfRange ()
, vous devez également faire l'égalité avec String.equals ()
au lieu de == code>.
import java.util.Arrays;
public class Main {
public static int countSmiles(char[] numbers) {
if (numbers.length == 0) return 0;
if(String.valueOf(numbers[0]).equals(":") && String.valueOf(numbers[1]).equals(")")) {
return 1 + countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
public static void main (String[] args) {
char[] s = {'n','g', ':' ,')', ':' ,')'};
System.out.println(countSmiles(s));
}
}
Premièrement, votre récursion ne bouge jamais.
==
en java utilisez equals
public static int countSmiles (char [] numbers, int index) {
public static void main (String[] args) { char[] s = {'n','g', ':' ,')', ':' ,')','r','5'}; System.out.println(countSmiles(s,0)); }
} // Classe principale
if ( numbers.length-2 < index) return 0; if(numbers[index]==':' && numbers[index+1]==')') return 1 + countSmiles(numbers,index+1); return countSmiles(numbers,index+1);
Essayez avec ceci et il fonctionnera.