Java: instruction Try-Catch dans une boucle While
Je suis en train d'exécuter un morceau de code qui analyse une entrée de l'utilisateur de la valeur. Cette action est contenue dans une méthode personnalisée que j'ai écrit, nommé getTriangleDim(); la méthode lit dans les utilisateurs int valeur, en vous assurant qu'il est à une certaine distance, puis renvoie la valeur int qui a été saisie. La méthode fonctionne très bien et je n'ai pas de problèmes avec elle.
Le problème se pose lorsque j'entre dans une non-valeur int pour mon getTriangleDim() la méthode. Il me donne une InputMismatchException erreur. J'ai écrit une instruction try-catch dans un do-while pour tenter de résoudre ce problème. Mais c'est la première fois que j'ai jamais utilisé une instruction try-catch, et je suis apparemment manque quelque chose.
Voici le code pour l'instruction try-catch imbriquée à l'intérieur de la boucle while:
//loop to scan for triangle dimension
boolean bError = true;
int triangle;
do{
try {
triangle = getTriangleDim();
bError=false;
}
catch (Exception e){
System.out.println("You did not enter an integer, please enter an integer value");
triangle = getTriangleDim();
}
}while (bError);
si je l'ai tester en entrant une valeur char à la place de l'int, il attrape l'erreur une fois, et ensuite imprime mes "vous n'avez pas....." l'énoncé. Mais si je re-entrer dans un autre non-int nombre, j'obtiens une erreur d'exécution à nouveau que dit.......vous l'aurez deviné........ InputMismatchException erreur.
Le code de ma méthode est ici:
//method for scanning triangle dimensions from keyboard
public static int getTriangleDim(){
int triangle = 0;
Scanner keyboard = new Scanner(System.in);
do{
System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
triangle = keyboard.nextInt();
if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
System.out.println("Inpute value outside of range");
}while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
return triangle;
}
J'ai besoin de l'-lors de la boucle de continuer, mais je continue à recevoir ces erreurs.
class NotIntegerException extends Exception { .. }
et de l'attraper à l'extérieur, pour le distinguer d'un autre type d'exceptionsOriginalL'auteur | 2014-02-25
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin de demander pour l'entrée dans le
catch
bloc. Vous êtes déjà dans une boucle, de sorte que vous pouvez intercepter l'exception, indiquer à l'utilisateur pour vous donner d'entrée valide, et puis vous n'avez pas à faire quoi que ce soit--vous aurez boucle de retour autour de la le début.Comme une note de côté (et comme vous l'avez remarqué), votre code ne sera pas actuellement de compilation si vous essayez d'utiliser
triangle
à l'extérieur de latry
bloc, parce que"triangle might not have been initialized"
. Cela est dû au fait que le compilateur impossible de déterminer au moment de la compilation de ce que votre programme va faire au moment de l'exécution: c'est-à-dire, le compilateur ne peut pas voir quetriangle
sera toujours initialisé à l'intérieur de cette boucle. Si votre déclaration de variable doit également définirtriangle
certaine valeur par défaut.0
est la valeur par défaut normal pourint
, mais l'utilisation de tout ce qui fait sens dans votre programme (il ressemble à0
est fine, basée sur votregetTriangleDim
code).De cette façon, vous pouvez "promesse", le compilateur que
triangle
aura la valeur par le temps de vous sortir de la boucle, et vous serez capable de l'utiliser ailleurs.Le compilateur ne ment pas! Vous peut voir qu'il doit être initialisé par le temps de vous sortir de la boucle, mais le compilateur vous ne pouvez pas prédire comment votre programme run. Aussi loin que le compilateur, vous pourriez être en mesure de sortir de la boucle sans l'initialiser
triangle
. Voir question pour un exemple similaire à la vôtre, mais le point est que vous devez initialisertriangle
certaine valeur par défaut (0
et-1
sont communs), avant la boucle où vous ne le réel d'affectation (par exemple,int triangle = 0;
).Thnaks! J'apprécie l'aide.
OriginalL'auteur Henry Keiter