2015-09-15 4 views
3

Je crée un petit algorithme et c'est une partie de celui-ci. Ce que je veux, c'est que je veux si l'utilisateur entre une valeur non entière je veux donner un message à un utilisateur et laisser l'utilisateur entrer un numéro nouveautry catch with Scanner

boolean wenttocatch; 

     do{ 


     try { 
      wenttocatch=false; 
      number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
     } catch (Exception e) { 
      wenttocatch=true; 
      System.out.println("xx"); 
     } 

     }while(wenttocatch==true); 

et je reçois une boucle sans fin, je ne peux pas comprendre pourquoi et comment puis-je identifier si l'utilisateur entre un nombre non entier et si l'utilisateur est saisie et le nombre non entier comment demander à l'utilisateur de entrer à nouveau

Mettre à jour lorsque j'imprime l'exception je reçois l'exce ption comme InputMismatchException que dois-je faire

Répondre

2

Vous n'avez pas à essayer. Ce code fera l'affaire pour vous:

public static void main(String[] args) { 
    boolean wenttocatch = false; 
    Scanner scan = new Scanner(System.in); 
    int number_of_rigons = 0; 
    do{ 
     System.out.print("Enter a number : "); 
     if(scan.hasNextInt()){ 
      number_of_rigons = scan.nextInt(); 
      wenttocatch = true; 
     }else{ 
      scan.nextLine(); 
      System.out.println("Enter a valid Integer value"); 
     } 
    }while(!wenttocatch); 
} 
+0

thnx il fonctionne – pavithra

0

Chaque fois que vous obtenez une exception, wenttocatch est défini sur true et le programme sera bloqué dans une boucle infinie. Tant que vous n'obtenez pas l'exception, vous n'obtiendrez pas une boucle infinie.

0

La logique si sc.nextInt() provoquant l'erreur est présente

1) wenttocatch est réglé sur faux

2) sc.nextInt() émet erreur

3) wenttocatch est réglé true

4) répétition [parce que wenttocatch est vrai]

pour résoudre cet ensemble wentocatch = false dans la déclaration de capture

catch (Exception e) { 
       wenttocatch=false; 
       System.out.println("xx"); 
      } 

si vous faites plus que vous montrez ici, utilisez un compteur [si votre comptage ou un booléen si vous n'êtes pas], mais à moins que vous faites plus, faire la première chose que ci-dessus

boolean wenttocatch; 
int count = 0; 

      do{ 


      try { 
       wenttocatch=false; 
       number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
      } catch (Exception e) { 
       count++; 
       wenttocatch=true; 
       System.out.println("xx"); 

      } 

      }while(wenttocatch==true && count < 1); 

Réponse Commentaire:

Je pense que vous voulez obtenir ints jusqu'à ce qu'un utilisateur n'entre plus. En fonction de votre entrée une façon de faire qui est ce

int number_of_rigons; 
while((number_of_rigons = sc.nextInt()) != null){ 
    //do something 
} 
+0

bien ce que je veux est que je veux obtenir un entier jusqu'à ce qu'il entre dans un entier la boucle while devrait fonctionner encore et encore – pavithra

+0

Pas tout à fait sûr de ce que vous voulez dire. Vous voulez obtenir tous les entiers qu'un utilisateur saisit jusqu'à ce qu'il n'entre plus d'entiers? – applecrusher

4

Le Scanner n'avance jusqu'à ce que l'élément est en cours de lecture. Ceci est mentionné dans Scanner JavaDoc. Par conséquent, vous pouvez simplement lire la valeur en utilisant la méthode .next() ou vérifier si hasInt() avant de lire la valeur int.

boolean wenttocatch; 
     int number_of_rigons = 0; 
     Scanner sc = new Scanner(System.in); 
     do { 

      try { 
       wenttocatch = false; 
       number_of_rigons = sc.nextInt(); // sc is an object of scanner class 
      } catch (InputMismatchException e) { 
       sc.next(); 
       wenttocatch = true; 
       System.out.println("xx"); 
      } 

     } while (wenttocatch == true); 
-1
.... 
try { 
    .... 
} catch (Exception e) { 
    sc.next(); 
    wenttocatch=true; 
    System.out.println("xx"); 
} 
+0

Mais il a résolu mon problème aussi bien. –

+0

Désolé, jeté un coup d'oeil à ceci dans les nouveaux commentaires de revue et a pensé à tort "bien wenttocatch est toujours vrai, donc il va encore à la boucle". Cependant, ceci est identique à la réponse de James Jithin. – Vitruvius