2009-11-19 8 views
0

Je suis en train de boucler une exception, mais pour une raison quelconque ce ne est pas de me donner la possibilité de ré écrire mon fichier scanner:Looping toujours

Je ne sais pas comment utiliser BufferedReader c'est pourquoi je suis en utilisant cela. Des indices?

Voilà ma classe standard avec ma méthode

package arrayExceptionsWithInput; 
import java.util.*; 
public class GetThoseNumbersBaby { 

    int firstInt; 
    int secondInt; 
    boolean error; 
    Scanner yourNumbers = new Scanner(System.in); 

    public void findNumbers() 
    { 
     System.out.println(" please enter your first number"); 
     firstInt = yourNumbers.nextInt(); 
     System.out.println(" pleas enter your second number"); 
     secondInt = yourNumbers.nextInt(); 
     int finalInt = (firstInt+secondInt); 
     System.out.println("total is: " + finalInt); 
    } 
} 

Et voici ma classe principale, à l'exception étant implemeted avec une boucle:

package arrayExceptionsWithInput; 
import java.util.*; 

public class InputException 
{ 
    public static void main(String[] args) 
    { 
     boolean error = false; 
     GetThoseNumbersBaby zack = new GetThoseNumbersBaby(); 


     { 
      do { 
       try 
       { 
        zack.findNumbers(); 
       } 
       catch(InputMismatchException Q) 
       { 
        System.out.println(" one of your integers was incorrect, please try again"); 
        Q.printStackTrace(); 
        error = true; 
       } 
      } while (error == true); 
     } 
     error = false; 
    } 
} 

Si quelqu'un a des idées sur la façon de boucler différemment Je suis tout ouïe.

+0

pourquoi avez-vous enveloppé la do-while à l'intérieur {}? –

+0

'while (erreur == true)' -> 'while (erreur)' – JRL

+0

while (erreur == true) serait écrit de façon plus idiomatique alors que (erreur) – Henry

Répondre

0

i décidé trop se débarrasser de la classe de méthode et vient de mettre la méthode dans la zone d'exception try.

utilisé un .nextLine après le scanner et il semble fixe.

cela semble ok?

package arrayExceptionsWithInput; 
import java.util.*; 
public class InputException 
{ 
public static void main(String[] args) 
{ 
boolean error = false; 
int firstInt; 
int secondInt; 
Scanner yourNumbers = new Scanner(System.in); 
{ 
    do{ 
      try 
      { 

        System.out.println(" please enter your first number"); 
        firstInt = yourNumbers.nextInt(); 
        yourNumbers.nextLine(); 
        System.out.println(" pleas enter your second number"); 
        secondInt = yourNumbers.nextInt(); 
        yourNumbers.nextLine(); 
        int finalInt = (firstInt+secondInt); 
        System.out.println("total is: " + finalInt); 
        yourNumbers.nextLine(); 

      } 
      catch(InputMismatchException Q) 
      { 

       Q.printStackTrace(); 
       System.out.println(" one of your integers was incorrect, please try again"); 
       error = true; 
       yourNumbers.nextLine(); 
      } 
     }while (error == true); 
    }error = false; 
} 
} 
+0

Le scanner garde la réponse et ne se repose pas à moins que je mette dans votreNumberbers.NextLine() – OVERTONE

+0

Il est plus utile si vous éditez votre question avec des mises à jour au lieu d'ajouter des mises à jour. – rsp

+2

Vous devez toujours définir error = false dans la boucle, sinon si vous rencontrez une exception, l'erreur sera définie sur true et ne sera jamais effacée. –

1

Définissez erreur false avant l'action. De cette façon, vous avez la bonne condition de sortie si l'utilisateur l'obtient correctement.

error = false; 
zack.findNumbers(); 
+0

Quelle est la raison de la downvote ici? –

+0

désolé, encore s'habituer trop empile l'interface. Je ne savais pas que j'avais assez de rep pour voter sur les articles – OVERTONE

0

variables boucle Vous en 'erreur' a une valeur 'true'. Cependant, il devient 'vrai' uniquement lorsque le bloc est lancé (c'est-à-dire lorsque le bloc 'catch' est exécuté). Le flux de contrôle ne l'atteint pas.