Try/catch en Java
Quelqu'un pourrait-il me donner une astuce pourquoi ce try et catch n'est pas de travail?
Il jette un scanner exception au lieu de l'impression, le message que j'attends.
import java.util.*;
import java.io.*;
import java.math.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
Boolean test = true;
while (test == true) {
try {
double x, y;
String operator;
Scanner scan = new Scanner(System.in);
Scanner scan_2 = new Scanner(System.in);
Scanner ScanOperator = new Scanner(System.in);
System.out.println(" Enter a double value: ");
x = scan.nextDouble();
System.out.println(" Enter another double value: ");
y = scan_2.nextDouble();
System.out.println(" Enter a operator for the operation you want to execute, or X if you want to quit: ");
operator = ScanOperator.nextLine();
if (operator.equals("x") || operator.equals("X")) {
test = false;
System.out.println("No calculation was made!!!");
}
System.out.println(Calculation(operator, x, y));
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Input must be a number.");
}
}
}
public static double Calculation(String operator, double x, double y) {
double result = 0;
double myAdd = 0;
double mySub = 0;
double myMult = 0;
double myDiv = 0;
double myPower = 0;
double myMod = 0;
if (operator.equals("+")) {
myAdd = x + y;
result = myAdd;
} else if (operator.equals("-")) {
mySub = x - y;
result = mySub;
} else if (operator.equals("*")) {
myMult = x * y;
result = myMult;
} else if (operator.equals("/")) {
myDiv = x / y;
result = myDiv;
} else if (operator.equals("^")) {
myPower = Math.pow(x, y);
result = myPower;
} else if (operator.equals("%")) {
myMod = x % y;
result = myMod;
} else {
}
return result;
}
}
Quel est l'exception dites-vous ?
Ce code est très bien. Je suis en mesure de l'exécuter en tant qu'il est à l'échelle locale.
Ce code est très bien. Je suis en mesure de l'exécuter en tant qu'il est à l'échelle locale.
OriginalL'auteur Tony | 2010-01-14
Vous devez vous connecter pour publier un commentaire.
Simple, le programme lève ScannerException, mais votre try catch ne peut attraper NumberFormatException, vous devez ajouter un autre attraper la clause catch ScannerException, ou attraper le générique d'Exception.
par exemple, quand vous dites:
c'est seulement en spécifiant comment attraper NumberFormatException.
Pour attraper toutes les exceptions, vous devez faire:
Dans ce cas, la deuxième prise d'obtenir tout ce que n'a pas été pris dans l'attraper d'abord parce que toutes les exceptions d'étendre l'Exception de la classe, vous pouvez assister à toutes les classes dérivées de cette déclaration.
Cependant, depuis la capture de l'Exception, en lui-même est mal vu, vous pouvez aussi faire:
Pour attraper les exceptions dans le même bloc.
je vous remercie. C'était vraiment utile!
Mon favori personnel est catch(Throwable t)
Notez que ScannerException n'existe pas dans le JDK, et que NumberFormatException est pas jeté à l'intérieur de ce bloc.
Si vous avez trouvé une question pour être utile, il est de bonne pratique pour accepter la réponse (I. E. sélectionnez la coche sur la réponse que vous avez aimé le meilleur)
OriginalL'auteur zmbush
Vous tentez d'attraper un NumberFormatException. Vous avez besoin d'ajouter une instruction catch pour un ScannerException, comme c'est différent d'un NumberFormatException.
OriginalL'auteur Jeff
Vous devez prendre un ScannerException ou certains l'aiment.
À ce code, vous ne sont que d'attraper la NumberFormatException .
Essayer certains comme ceci:
catch (NumberFormatException, ScannerException e) {
Vous êtes de droite. Mon erreur. =)
comment peut-on attraper 2 exceptions dans le même bloc catch?
OriginalL'auteur Pedro Ghilardi
Vous assistez à un mauvais exception.
OriginalL'auteur Anon.
Votre code ne sera pas jeter un
NumberFormatException
. Vous devez attraper unInputMismatchException
à la place.Regardant
nextDouble
, dansScanner
, il semble que leScanner
code gère leNumberFormatException
pour vous et jette alors un autre type d'exception:de
java.util.Scanner
:Lorsque vous rencontrez un problème de ce genre, je recommande que vous regardez à travers la Java de la source comme un premier arrêt. C'est une excellente ressource.
Notez également qu'il n'est pas
ScannerException
dans le JDK.OriginalL'auteur akf
Il suffit de prendre
InputMismatchException
au lieu deNumberFormatException
et tout fonctionne bien.Bien sûr que non.Le code n'est pas la capture de l'exception au droit.
OriginalL'auteur Thunderhashy
Pourquoi ne pas simplement faire:
Pour info, la regex pour la double précision serait [chiffres][.][chiffres] avec le [.][chiffres] facultative.
OriginalL'auteur Droo