7
votes

Lancer une décompression personnaliséexception à Java

J'essaie de jeter ma propre énorme instruction lors de la convocation d'un mois de chaîne dans un entier. Je ne sais pas comment jeter l'exception. Toute aide serait appréciée. Dois-je ajouter une capture d'essai avant cette partie du code? J'en ai déjà un dans une autre partie de mon code.

// sets the month as a string
mm = date.substring(0, (date.indexOf("/")));
// sets the day as a string
dd = date.substring((date.indexOf("/")) + 1, (date.lastIndexOf("/")));
// sets the year as a string
yyyy= date.substring((date.lastIndexOf("/"))+1, (date.length()));
// converts the month to an integer
intmm = Integer.parseInt(mm);
/*throw new NumberFormatException("The month entered, " + mm+ is invalid.");*/
// converts the day to an integer
intdd = Integer.parseInt(dd);
/* throw new NumberFormatException("The day entered, " + dd + " is invalid.");*/
// converts the year to an integer
intyyyy = Integer.parseInt(yyyy);
/*throw new NumberFormatException("The yearentered, " + yyyy + " is invalid.");*/


3 commentaires

Qu'est-ce qui se passe avec le code que vous avez commenté?


@Phom je reçois une déclaration inaccessible pour tout code après le lancer.


J'ai sorti les déclarations de lancer et j'ai ajouté ma propre chaîne à l'endroit où j'avais attrapé l'exception plus tôt dans mon code.


3 Réponses :


3
votes
try {
   // converts the month to an integer
   intmm = Integer.parseInt(mm);
} catch (NumberFormatException e) {
  throw new NumberFormatException("The month entered, " + mm+ " is invalid.");
}

2 commentaires

Oui, vous avez raison parce que si soulevé une runtimédiexception ... mais dans ce contexte, la probabilité est faible. Cependant, vous avez raison.


J'ai sorti les déclarations de lancer et j'ai ajouté ma propre chaîne à l'endroit où j'avais attrapé l'exception plus tôt dans mon code. Catch (NumberFormatException NFE) {System.Out.PrintLN (NFE.GetMessage () + "a une entrée non numérique en entrée");} Merci pour votre entrée!



6
votes

quelque chose comme ceci: xxx

ou, un peu mieux: xxx

edit: maintenant que vous avez mis à jour votre message, cela ressemble à ce que vous réellement besoin est quelque chose comme Analyse (chaîne) de SimpleDateFormat


2 commentaires

Le deuxième exemple est agréable car il créera ensemble les exceptions. Vous pouvez donc constater que la cause des arguments illégaux était l'exception au format numéro.


@unbeli j'ai sorti les déclarations de lancer et j'ai ajouté ma propre chaîne à l'endroit où je saisis l'exception plus tôt dans mon code. Catch (NumberFormatException NFE) {System.Out.PrintLN (NFE.GetMessage () + "a une entrée non numérique en entrée");} Merci pour votre entrée



1
votes

INTEGER.PARSINTING () produit déjà numériquesFormatxception. Dans votre exemple, il semble plus approprié de jeter IllegalargumentException: xxx


1 commentaires

J'ai sorti les déclarations de lancer et j'ai ajouté ma propre chaîne à l'endroit où j'avais attrapé l'exception plus tôt dans mon code. Catch (NumberFormatException NFE) {System.Out.PrintLN (NFE.GetMessage () + "a une entrée non numérique en entrée");} Merci pour votre entrée