2015-07-15 1 views
0

J'ai fait un programme qui demande à l'utilisateur d'entrer deux nombres, et il devrait donner une erreur si le deuxième nombre est un 0. Cependant, j'obtiens une erreur, qui est ci-dessous. J'ai une instruction if-else, mais elle ne fait pas ce que je m'attends à faire. Je ne suis pas sûr de ce que je fais mal.Pourquoi mon code lance-t-il une exception ArithmeticException lorsque je m'attends à ce qu'il affiche simplement "Error"?

public static void main(String[] args) { 
    int x, y; 
    Scanner kbd = new Scanner(System.in); 

    System.out.print("Enter a: "); 
    x = kbd.nextInt(); 
    System.out.print("Enter b: "); 
    y = kbd.nextInt(); 

    int result = add(x, y); 
    int result2 = sub(x, y); 
    int result3 = multi(x, y); 
    int result4 = divide(x, y); 
    int result5 = mod(x, y); 

    System.out.println(x + " + " + y + " = " + result); 
    System.out.println(x + " - " + y + " = " + result2); 
    System.out.println(x + " * " + y + " = " + result3); 
    System.out.println(x + "/" + y + " = " + result4); 
    System.out.print(x + " % " + y + " = " + result5); 
} 

public static int add(int x, int y) { 
    int result; 
    result = x + y; 
    return result; 
} 

public static int sub(int x, int y) { 
    int result2; 
    result2 = x - y; 
    return result2; 
} 

public static int multi(int x, int y) { 
    int result3; 
    result3 = x * y; 
    return result3; 
} 

public static int divide(int x, int y) { 
    int result4; 
    result4 = x/y; 
    if (y == 0) { 
     System.out.print("Error"); 
    } else { 
     result4 = x/y; 
    } 
    return result4; 
} 

public static int mod(int x, int y) { 
    int result5; 
    result5 = x % y; 
    if (y == 0) { 
     System.out.print("Error"); 
    } else { 
     result5 = x % y; 
    } 
    return result5; 
} 

Sortie Je reçois cette erreur ..

Enter a: 10 
Enter b: 0 
Exception in thread "main" java.lang.ArithmeticException:/by zero 
+0

Alors, quand cela se produit une erreur? Quand vous «divisez» (emphase ** diviser **)? –

+0

Il est appelé "Système" pas "Sytem" –

+0

Pouvez-vous s'il vous plaît coller tout votre fichier? – nigonzalezm

Répondre

3

Vous obtenez cela parce que quand vous divisez par 0, Java renvoie une exception. Si vous voulez juste utiliser une instruction if pour le manipuler, puis utiliser quelque chose comme ceci:

public static int divide(int x, int y){ 
    int result; 
    if (y == 0) { 
// handle your Exception here 
} else { 
    result = x/y; 
    } 
    return result; 
} 

Java gère également des exceptions par blocs try/catch, qui exécute le code dans le bloc try et se chargera de la façon dont les exceptions sont traitées dans le bloc catch. Ainsi, vous pouvez faire:

try { 
     result4 = divide(a, b); 
} 
catch(//the exception types you want to catch){ 
    // how you choose to handle it 
} 
+0

vois que je l'avais aussi mais l'ai effacé, parce que dans le "// gérer l'exception ici" j'ai essayé de mettre system.out.print ("erreur") mais je reçois une erreur int, donc je ne sais pas quelle exception je pourrais mettre là – Frank

+0

merci caleb, pour les blocs essayer/attraper ... bien que je ne ai pas encore lu à ce sujet, donc je veux coller à la base en ce moment – Frank

+0

fondamentalement, vous devez choisir ce qui se passe si quelqu'un essaie de diviser par zéro. En Java, le try/catch laissera le reste de votre code s'exécuter même si la division a une erreur. –

0

Ok, j'ai copié-collé votre code mot pour mot, il entouré dans une classe, importés java.util.Scanner et exécuter javac. Pour ce que je peux voir, vous avez deux extras "}" à la fin de votre fichier. Vous avez également d'autres problèmes: result4 et result5 ne sont pas initialisés et le compilateur deviendra fou avec vous, car si y == 0 est vrai alors les valeurs de retour des méthodes divide et mod ne sont pas définies.

+0

a obtenu merci, j'ai changé mon code, mais maintenant je reçois l'erreur ci-dessus – Frank

+2

vous exécutez '' result4 = x/y' 'avant de cocher' 'y == 0'', bien sûr, cela déclenchera une exception. Just init '' result4'' à un entier (peut-être '' result4 = 0'') – nigonzalezm

0
public static void main(String[] args) { 

    int x,y; 
    Scanner kbd = new Scanner(System.in); 

    System.out.print("Enter a: "); 
    x = kbd.nextInt(); 
    System.out.print("Enter b: "); 
    y = kbd.nextInt(); 


    int result = add(x,y); 
    int result2 = sub(x,y); 
    int result3 = multi(x,y); 
    int result4 = divide(x,y); 
    int result5 = mod(x,y); 

    System.out.println(x +" + "+ y +" = "+ result); 
    System.out.println(x +" - "+ y +" = "+ result2); 
    System.out.println(x +" * "+ y +" = "+ result3); 
    System.out.println(x +"/"+ y +" = "+ result4); 
    System.out.print(x +" % "+ y +" = "+ result5); 

    } 

    public static int add(int x, int y){ 
    int result; 
    result = x+y; 
    return result; 
    } 


    public static int sub(int x, int y){ 
    int result2; 
    result2 = x-y; 
    return result2; 
    } 

    public static int multi(int x, int y){ 
     int result3; 
     result3 = x * y; 
      return result3; 
    } 

    public static int divide(int x, int y){ 
     int result4; 
     result4 = 0; 
     if (y == 0) { 
     System.out.print("Error"); 
      } 
     else{ 
      result4 = x/y; 
      } 
     return result4; 
    } 

    public static int mod(int x, int y){ 
     int result5; 
     result5 = 0; 
     if (y == 0) { 
      System.out.println("Error!"); 
      } 
      else{ 
      result5 = x % y; 
      } 
      return result5; 

} 
}  

sortie

Enter a: 4 
Enter b: 0 
ErrorError! 
4 + 0 = 4 
4 - 0 = 4 
4 * 0 = 0 
4/0 = 0 
4 % 0 = 0