2017-08-30 4 views
4

Je n'arrive pas à résoudre une tâche récursive et n'ai pas réussi.Numéro de retour _order_ à partir d'une entrée de scanner récursivement

L'objectif de la mission est de appeler la fonction

reverseNumbers(new Scanner("11 23 31 49 56 611")) 

et obtenir la sortie

"611 56 49 31 23 11" 

sans être autorisés à utiliser des tableaux, des listes, les chaînes et la méthode ne doit déclarer une variable .

Le code que j'ai écrit ne fonctionne pas. Je reçois une erreur StackOverflow, que je comprends pourquoi je reçois. C'est parce que le paramètre scan ne change pas et il doit pour que la récursivité fonctionne. Cependant, je ne sais pas comment modifier l'argument d'entrée avec les outils disponibles dans l'utilitaire Scanner.

public static String reverseNumbers(Scanner scan){ 
    if (!scan.hasNext()) { 
     return ""; 
    } 
    else { 
     return reverseNumbers(scan) + " " + scan.nextInt(); 
    } 
} 
+4

Question de devoirs avec une tentative de le résoudre et la description du problème OP est confrontée. C'est une vue rare. +1 – Pshemo

Répondre

5

Le problème est que vous êtes récursif avant de lire le numéro du scanner.

Rappelez-vous que Java evaluates operands left-to-right. Donc, il évalue reverseNumbers(scan) avant scan.nextInt().

Cela signifie qu'il va continuer à:

  • Voyant que scan.hasNext()
  • Appel reverseNumbers
  • Voyant que scan.hasNext()
  • Appel reverseNumbers
  • Voyant que scan.hasNext()
  • Appel reverseNumbers
  • ...

Évaluer scan.hasNext() avant de faire l'appel récursif:

int next = scan.nextInt(); 
return reverseNumbers(scan) + " " + next; 

Maintenant, vous consommez la valeur que vous détectez avec hasNext() (qui devrait être hasNextInt(), par le chemin; ou utilisez String next = scan.next()), de sorte que la valeur détectée par le scanner ne soit plus détectée.