2010-05-29 3 views
1

Je suis nouveau sur java, alors pardonnez la question Noob.analyse des types primitifs à l'aide de java.util.Scanner

J'ai créé une application swing qui a fondamentalement trois chaînes d'entrée dans JTextFields: loanAmount, interestRate et loanYears et un seul bouton de soumission avec le EventAction.

J'essaie d'utiliser le java.util.Scanner pour analyser l'entrée des types primitifs que je peux utiliser dans les calculs.

Je reçois une erreur dans NetBeans indiquant que mes variables ne sont pas reconnues? ne devrais-je pas appeler System.in?

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    Scanner keyInput = new Scanner(System.in); 
    while (true) 
     try{ 
      double amount = keyInput.nextDouble(loanAmount.getText()); 
      double interest = keyInput.nextDouble(interestRate.getText()); 
      int years = keyInput.nextInt(loanYears.getText()); 

     } catch (NumberFormatException nfe){ 

     } 
} 

Répondre

2

Ne vous inquiétez pas de poser des questions plus faciles, nous les recevons tout le temps. Si ce n'était pas pour des questions faciles, en fait, je n'aurais jamais à répondre à quoi que ce soit.

Je peux voir trois problèmes avec votre code tout de suite:

  1. Vous êtes une exception, mais la capture puis le jeter. Il y a des moments où vous ne voulez rien faire en réponse à une exception, du point de vue d'un utilisateur, mais en tant que programmeur, vous voulez savoir. Essayez de dire nfe.printStackTrace(System.err);

  2. Scanner n'est pas ce que vous cherchez. Double.valueOf (..) serait plus direct. Maintenant, en ce qui concerne votre problème actuel: Vos trois variables sont hors de portée à la fin du bloc try. Essayez de les déclarer là où vous déclarez KeyInput.

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    double amount, interest; 
    int years; 
    while (true) { 
     try { 
      amount = Double.valueOf(loanAmount.getText()); 
      interest = Double.valueOf(interestRate.getText()); 
      years = Integer.valueOf(loanYears.getText()); 

     } catch (NumberFormatException nfe){ 
      if (DEBUG) nfe.printStackTrace(System.err); 
      return; 
     } 
    } 
    // Your values of amount, interest and years will be available here. 
    // Past this last curley brace, however, they will go out of scope. 
    // If you want them to stick around for as long as the new object, 
    // define them as class fields. 
}
+0

Merci à tous, qui est parfaitement ce que je avais besoin. –

0

Le scanner est destiné à la ligne de commande. Vous devez accéder au champ de saisie et obtenir sa valeur et le transformer en int.

Essayez comme ceci:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     double amount = Double.valueof(loanAmount.getText()); 
     double interest = Double.valueof(interestRate.getText()); 
     int years = Double.valueof(loanYears.getText()); 
} 
0

Non, vous ne devriez pas;) Le scanner lit les données à partir d'un flux et System.in est un flux qui lit octets à partir de la console et pas de composants Swing.

L'idée ici est d'analyser la chaîne dans le champ de texte:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    try { 
     double amount = Double.parseDouble(loanAmount.getText()); 
     double interest = Double.parseDouble(interestRate.getText()); 
     int years = Integer.parseInt(loanYears.getText()); 
    } catch (NumberFormatException nfe){ 

    } 
} 
Questions connexes