Donc, mon programme demande à l'utilisateur d'entrer deux entiers, puis si l'utilisateur entre une chaîne, il affichera un message d'erreur "Invalide! Veuillez entrer un entier". Mais après que le message d'erreur apparaît, il affiche une erreur.Utiliser NumberFormatException dans JTextField
C'est l'erreur mais je réussi à convertir le JTextField en chaîne puis en entier
Exception in thread "main" java.lang.NumberFormatException: For input string: "a"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at SimpleCalculator1.main(SimpleCalculator1.java:52)
Et ceci est mon code
import javax.swing.*;
public class SimpleCalculator1
{
public static void main(String [] args)
{
int error1, error2;
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
JTextField field3 = new JTextField();
Object[] message =
{
"Enter first integer:", field1,
"Input second integer:", field2,
"Choose the operation to be used\nAddition(+)\nSubtraction(-)\nMultiplication(*)\nDivision(/):", field3,
};
int option = JOptionPane.showConfirmDialog(null, message, "SimpleCalculator", JOptionPane.OK_CANCEL_OPTION);
boolean shouldExit = false;
while(!shouldexit)
{
if(option == JOptionPane.OK_OPTION)
{
String value1 = field1.getText();
String value2 = field2.getText();
String operation = field3.getText();
try
{
int num1 = Integer.parseInt(value1);
int num2 = Integer.parseInt(value2);
}
catch(NumberFormatException ne)
{
JOptionPane.showConfirmDialog(null,"Invalid! Please input an integer","Error", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); //When I press ok, I need help to bring me back to input entries
}
switch(operation = field3.getText())
{
case "+":
case "Addition":
{
int num1 = Integer.parseInt(value1);
int num2 = Integer.parseInt(value2);
int result = num1+num2;
JOptionPane.showMessageDialog(null,"The sum is: "+result);
break;
}
case "-":
case "Subtraction":
{
int num1 = Integer.parseInt(value1);
int num2 = Integer.parseInt(value2);
int result = num1-num2;
JOptionPane.showMessageDialog(null,"The difference is: "+result);
break;
}
case "*":
case "Multiplication":
{
int num1 = Integer.parseInt(value1);
int num2 = Integer.parseInt(value2);
int result = num1*num2;
JOptionPane.showMessageDialog(null,"The product is: "+result);
break;
}
case "/":
case "Division":
{
int num1 = Integer.parseInt(value1);
int num2 = Integer.parseInt(value2);
double result = (double)num1/num2;
JOptionPane.showMessageDialog(null,"The quotient is: "+result);
break;
}
default:
error1 = JOptionPane.showConfirmDialog(null,"Invalid operation, please try again","Error",JOptionPane.DEFAULT_OPTION,JOptionPane.ERROR_MESSAGE); //I need help here for creating a loop that will take me back to the beginning.
}
option = JOptionPane.showConfirmDialog(null, message, "SimpleCalculator", JOptionPane.OK_CANCEL_OPTION);
}
else if (option == JOptionPane.CANCEL_OPTION||)
{
JOptionPane.showMessageDialog(null,"Thank you for using our program!");
shouldExit = true;
}
}
}
L'erreur a disparu, mais quand je ne saisissez pas toutes les opérations ou l'opération n'est pas le même dans les choix de l'erreur « Opération non valide, s'il vous plaît essayer à nouveau » ne sera pas afficher seulement le "Invalide! S'il vous plaît entrer un nombre entier" –
Cela fonctionne pour moi. La clé est qu'elle valide d'abord les nombres valides et seulement si ceux-ci sont entrés et valides validera l'opération. Donc, si j'entre des nombres valides pour les premier et deuxième entiers, je vois qu'il me donne une erreur de validation correctement pour l'opération si elle n'est pas entrée ou une erreur invalide. Cela me semble correct. – pczeus
J'ai remarqué cela aussi. Merci pour votre réponse cela m'aide beaucoup et j'ai compris votre solution. Mais il y a une chose que je dois poser une question sans rapport à mon problème, puis-je mettre equalsIgnoreCase() dans une déclaration de cas de commutateur? –