2017-02-28 4 views
0

J'ai reçu une tâche pour faire des conversions de ft et cm. J'ai réduit la plus grande partie de ce chiffre et les conversions fonctionnent. Je veux également inclure l'instruction de A negative number... ou A non-digit... lorsque je tape une chaîne, par exemple, ou un nombre négatif, pour afficher ledit message. Le problème que j'obtiens est que quand je tape une chaîne ou un nombre négatif, j'obtiens la sortie de testProgram.NegativeNumberException quand j'entre , par exemple. Et testProgram.NonDigitNumberException, quand j'entre joe, par exemple.Java InputMismatchException Erreur

Je pense qu'il y a quelque chose qui ne va pas dans le catch mais je ne sais pas exactement où il ne cliquera pas.

package testProgram; 
import java.util.InputMismatchException; 
import java.util.Scanner; 

public class conversion{ 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     double cm = -1; 
     while(cm == -1){ 
     cm = convertToCentimeters(scan); 

     if(cm!=-1){ 
     System.out.println("Your result = " +cm); 
     } 
     else{ 
      System.out.println("Please enter the values again."); 
     } 
     scan.nextLine(); 
     } 
    } 
    public static double convertToCentimeters(Scanner scan){ 
     double centimeters = -1; 
     try{ 
      double foot = getFootValue(scan); 
      double inch = getInchValue(scan); 
      double totalInches = foot * 12 + inch; 
      centimeters = totalInches * 2.54; 

      }catch(NegativeNumberException e1){ 
       System.out.println(e1); 
      } 
      catch(NonDigitNumberException e2){ 
       System.out.println(e2); 
      } 
      return centimeters; 
    } 
    public static double getFootValue(Scanner scan) throws NegativeNumberException, NonDigitNumberException{ 
     try{ 
     System.out.println("Enter the foot value: "); 
     double foot = scan.nextDouble(); 
     if(foot <= 0){ 
      throw new NegativeNumberException ("A negative foot value has been entered."); 
     } 
     return foot; 
     } 
     catch(InputMismatchException e){ 
      throw new NonDigitNumberException ("A non-digit foot value has been entered."); 
     } 
    } 
    public static double getInchValue(Scanner scan)throws NegativeNumberException, NonDigitNumberException{ 
    try{ 
     System.out.println("Enter the inch value: "); 
     double inch = scan.nextDouble(); 
     if(inch <= 0){ 
      throw new NegativeNumberException ("A negative inch value has been entered."); 
     } 
     return inch; 
     } 
     catch(InputMismatchException e){ 
      throw new NonDigitNumberException ("A non-digit inch value has been entered."); 
     } 
    } 
} 
+2

remplacer le système '. out.println (e1); 'et' System.out.println (e2); 'avec votre message personnalisé. –

+0

@ScaryWombat C'est tout! Je vous remercie! – adhamncheese

Répondre

0

alternative à @ suggestion Effrayant, vous pouvez ajouter un constructeur à vos exceptions personnalisées comme -

NegativeNumberException(String str) { 
    System.out.println(str); 
} 

Cela doit vous aider à imprimer le message lorsque vous

throw new NegativeNumberException ("A n...."); 
+1

ouais, je n'aime pas ma suggestion –