2017-07-18 4 views
0

J'ai besoin de traiter un tableau de chaînes contenant des entiers (positifs) en tant que chaînes et la chaîne "POP".Est-ce une bonne pratique d'utiliser RuntimeExceptions pour la gestion des erreurs?

Lorsque Integer, je dois pousser l'entier à une pile d'entiers

Quand « POP », je dois enlever le haut élément le plus. À la fin, je dois retourner l'élément le plus élevé.

Si la pile est vide à n'importe quel moment pendant le traitement des entrées ou à la fin de celle-ci, je dois retourner -1 (erreur). Je n'ai pas besoin de faire autre chose si c'est une erreur.

J'ai mis cela en l'entourant d'un bloc catch try comme ci-dessous:

try { 
    //logic 
} 
catch (EmptyStackException) { 
      return -1; 
} 

Ma question est, est-il une bonne approche - lancer et attraper RuntimeExceptions dans les scénarios en tant que telle? Si non, quelle est la meilleure pratique?

+0

Si POP et stack.isEmpty() -> renvoient -1 – assylias

+0

@assylias Je comprends votre point. Mais existe-t-il une raison de ne pas utiliser RunTimeException? Par exemple, s'il y a d'autres opérations, par exemple "+" qui ajouterait les deux éléments les plus hauts, ne serait-il pas plus facile d'utiliser l'exception EmptyStackException? – Chillax

+0

si stack.size()> = 2? De manière générale, l'utilisation d'exceptions pour le flux de contrôle n'est pas une bonne pratique. C'est aussi le plus lent. – assylias

Répondre

1

L'avantage de Throwable (erreur et d'exception) est qu'ils contiennent des informations supplémentaires telles que la trace de la pile, un message d'erreur, etc.

Pour votre scénario, je crois qu'il est pas nécessaire d'ajouter des informations supplémentaires telles que « qui partie du code de cause -1" , "quelle est la cause de -1", "quelle est l'explication détaillée de retour -1", etc

en tant que tel pratique:

if(stack.isEmpty()) { return -1 } else { // logic }

serait s