2017-09-04 1 views
0

J'ai créé un programme de conversion de devises, et il nécessite une entrée utilisateur. À un moment donné du programme, je demande la monnaie à laquelle ils aimeraient convertir. Cependant, rien ne les empêche de mettre en "java" comme monnaie, ou n'importe quel autre mot.Exception de jetée, même avec le type de données correct

Voici mon code actuel, je vais vous expliquer un peu plus ce que je cherche plus bas:

import java.util.Scanner; 

public class Exchange { 
    public static void main(String[] args) { 
     int i = 1; 
     Scanner inn = new Scanner(System.in); 
     try{ 
      while (i > 0){ 
       double USDrate = 0.12808; 
       double EURrate = 0.107643821; 
       double GBPrate = 0.098872935; 
       System.out.println("Hello, what currency would you like to convert to?"); 
       System.out.println("Types: USD/EUR/GBP"); 
       String type = inn.nextLine(); 
       System.out.println("Hello, how much would you like to convert?"); 
       double NOK = inn.nextDouble(); 
       if(type.equalsIgnoreCase("USD")){ 
         System.out.printf(NOK + "kr equals $%.2f \n", (NOK*USDrate)); 
       }else if(type.equalsIgnoreCase("EUR")){ 
         System.out.printf(NOK + "kr equals €%.2f \n", (NOK*EURrate)); 
       }else if(type.equalsIgnoreCase("GBP")){ 
         System.out.printf(NOK + "kr equals £%.2f \n", (NOK*GBPrate)); 
       }else { 
        // This is where I would like to throw an exception if what they put in doesn't make sense. 
       } 
       inn.nextLine(); 
       System.out.println("Would you like to convert more?"); 
       System.out.println(" YES/NO "); 
       String ans = inn.nextLine(); 
       if(ans.equalsIgnoreCase("NO")){ 
         i = 0; 
       } 
      } 
     } 
     catch(Exception e){ 
      System.out.println("You've entered an incorrect value! Restart."); 
     } 
    } 
} 

Je veux l'exception à avoir lieu sous la dernière else -Déclaration dans le while -loop , comme vous pouvez le voir, j'ai un commentaire disant exactement cela. Je voudrais aussi avoir la même exception dans le bloc de code où je demande s'ils aimeraient convertir plus.

Toute personne pouvant vous aider? Si les détails dont vous avez besoin sont manquants, je les donnerai sur demande.

Merci d'avance. J'ai compris comment faire comme je le voulais. Aucune exception nécessaire, mais voici ma solution:

import java.util.Scanner; 

public class Exchange { 
    public static void main(String[] args) { 
     int i = 1; 
     Scanner inn = new Scanner(System.in); 
     try{ 
      while (i > 0){ 
       double USDrate = 0.12808; 
       double EURrate = 0.107643821; 
       double GBPrate = 0.098872935; 
       System.out.println("Hello, what currency would you like to convert to?"); 
       System.out.println("Types: USD/EUR/GBP"); 
       String type = inn.nextLine(); 
       if(!type.equalsIgnoreCase("USD") && !type.equalsIgnoreCase("EUR") && !type.equalsIgnoreCase("GBP")){ 
        System.out.println("Not available currency! Try again."); 
        break; 
       } 
       System.out.println("How much would you like to convert?"); 
       double NOK = inn.nextDouble(); 
       if(type.equalsIgnoreCase("USD")){ 
         System.out.printf(NOK + "kr equals $%.2f \n", (NOK*USDrate)); 
       }else if(type.equalsIgnoreCase("EUR")){ 
         System.out.printf(NOK + "kr equals €%.2f \n", (NOK*EURrate)); 
       }else if(type.equalsIgnoreCase("GBP")){ 
         System.out.printf(NOK + "kr equals £%.2f \n", (NOK*GBPrate)); 
       } 
       inn.nextLine(); 
       System.out.println("Would you like to convert more?"); 
       System.out.println(" YES/NO "); 
       String ans = inn.nextLine(); 
       if(ans.equalsIgnoreCase("NO")){ 
         i = 0; 
       } 
      } 
     } 
     catch(Exception e){ 
      System.out.println("You've entered an incorrect value! Restart."); 
     } 
    } 
} 

Utilisé une autre méthode :) Merci pour les réponses de toute façon, ils ont beaucoup aidé.

+1

Qu'avez-vous essayé? Vous semblez être à 99% du chemin. En outre, vous n'avez pas nécessairement besoin d'une exception ici. Vous pouvez simplement pré-vérifier la devise et faire une boucle lorsque l'entrée est mauvaise. – Carcigenicate

+0

Pour "avoir une exception" vous devez le lancer: 'throw new SomeException()', mais je ne pense pas que ce soit ce que vous voulez –

+0

Comment voulez-vous procéder à la pré-vérification de la devise et "loop while the input is bad "? Si cela ne vous dérange pas. Je suis très frais, donc je ne comprends pas encore tous les termes. Pourquoi je ne veux pas d'exception et quand le voudrais-je? Pardonnez toutes les questions, mais j'apprécie vraiment l'aide. –

Répondre

-1

Au lieu d'utiliser un if/else if... block, je suggère d'utiliser une instruction switch. Dans le cas par défaut, vous pouvez lancer une exception. Parce que vous êtes attraper Exception juste faire throw new Exception();

  type = type.toUpperCase(); 
      switch(type) { 
       case "USD": 
        System.out.printf(NOK + "kr equals $%.2f \n", (NOK*USDrate)); 
       break; 

       case "EUR": 
        System.out.printf(NOK + "kr equals €%.2f \n", (NOK*EURrate)); 
       break; 

       case "GBP": 
        System.out.printf(NOK + "kr equals £%.2f \n", (NOK*GBPrate)); 
       break; 

       default: 
        throw new Exception(); 
      } 

Et ne pas oublier de fermer le scanner

 finally { 
      inn.close(); 
     } 
+0

Que fait exactement l'instruction 'switch'? Pourriez-vous le décomposer pour moi? Je suis très nouveau en programmation. Dois-je fermer le scanner lorsqu'il ne lit pas à partir du fichier? –

+1

il n'y a absolument aucune différence fonctionnelle entre 'switch' et' if/elseif/else' Et vous ne devriez jamais fermer 'System.in'. –

+0

@JarrodRoberson même s'il n'y a pas de différence fonctionnelle entre 'switch' et' if else', un commutateur est plus clair à lire selon moi. Pouvez-vous m'expliquer ou me donner un lien vers une source pourquoi vous ne devriez jamais fermer 'System.in'? On m'a appris que vous devriez toujours fermer un scanner ?! – KilledByCheese

-1

Pourquoi vous voulez jeter exception ici!

imprimer Juste un message sens dans le bloc autre

System.out.println("You've entered an incorrect value! Please provide correct value"); // something similar. 

Si vous voulez vraiment jeter exception, puis écrire le code suivant dans le bloc d'autre.

throw new Exception(); 
+0

Je suis très nouveau à Java et à la programmation en général, donc vouloir lancer une exception est parce que je ne connais pas mieux. Edit: Je suppose que ce que je veux vraiment, c'est que le programme invite l'utilisateur à écrire une valeur correcte, ou dans ce cas, le mot correct. Est-ce qu'une simple impression le ferait? Est-ce qu'une exception le fera? –

+0

Je vais aller imprimer le message plutôt que de lancer une exception et demander à l'utilisateur de redémarrer le programme. – nagendra547

+0

Hm, d'accord. Ce que je veux réaliser, cependant, c'est que le programme invite immédiatement l'utilisateur à entrer les données. Par exemple, en imprimant "Mauvaise entrée, vous ne pouvez convertir en Usd, Eur ou Gbp", puis demander une nouvelle entrée utilisateur où l'utilisateur écrit l'un ou l'autre. Est-ce possible? –

0
import java.util.Scanner; 

public class Exchange { 
    public static void main(String[] args) throws Exception { 
     int i = 1; 
     Scanner inn = new Scanner(System.in); 
     while (i > 0) { 
      double USDrate = 0.12808; 
      double EURrate = 0.107643821; 
      double GBPrate = 0.098872935; 
      System.out.println("Hello, what currency would you like to convert to?"); 
      System.out.println("Types: USD/EUR/GBP"); 
      String type = inn.nextLine(); 
      System.out.println("Hello, how much would you like to convert?"); 
      double NOK = inn.nextDouble(); 
      if (type.equalsIgnoreCase("USD")) { 
       System.out.printf(NOK + "kr equals $%.2f \n", (NOK * USDrate)); 
      } else if (type.equalsIgnoreCase("EUR")) { 
       System.out.printf(NOK + "kr equals €%.2f \n", (NOK * EURrate)); 
      } else if (type.equalsIgnoreCase("GBP")) { 
       System.out.printf(NOK + "kr equals £%.2f \n", (NOK * GBPrate)); 
      } else { 
       throw new Exception(); 
      } 
      inn.nextLine(); 
      System.out.println("Would you like to convert more?"); 
      System.out.println(" YES/NO "); 
      String ans = inn.nextLine(); 
      if (ans.equalsIgnoreCase("NO")) { 
       i = 0; 
      } 
     } 
    } 
     /*(Exception e) { 
      System.out.println("You've entered an incorrect value! Restart.");*/ 
} 

Il lancera une exception dans le reste part.In votre code partie d'autre ne fonctionne pas comme il y a une exception, il va attraper bloc directement.

+1

S'il vous plaît lire [Comment puis-je écrire une bonne réponse?] (Http: // stackoverflow. com/help/how-to-answer) avant d'essayer de répondre à d'autres questions, car cette tentative n'a aucun sens. –