2 votes

Pourquoi mon code Java génère-t-il une exception de type DivideByZero ?

import java.io.IOException;
import java.util.*;

public class calling {
public static String s;
public static String t;
public static int y;
public static int x;

public static int num1() {
int x;
Scanner scanner = new Scanner (System.in);
System.out.println("Please enter a number called x: ");
x=scanner.nextInt();
return x;    
}

public static int num2() {
int y;
Scanner scanner = new Scanner (System.in);
System.out.println("Please enter a second number called y: ");
y=scanner.nextInt();
return y;    
}

public static void calculation() {
Scanner input = new Scanner(System.in);

System.out.println("What process would you like to do? *, /, + or - ?");
s=input.next();

if (s.equals("*")) {
System.out.println("\nThe product of these numbers is:" + (x*y));}
else 
if (s.equals("+")) {
System.out.println("\nThe sum of these numbers is: " + (x+y));}

System.out.println("\nDo you want x or y to be the dividor/subtractor?: ");
t=input.next();

if (t.equals("y") || t.equals("Y") ) {

if (s.equals("/")) {
System.out.println("\nThe quotient of these numbers is:  " + (x/y));}
else 
if (s.equals("-")) {
System.out.println("\nThe difference of these numbers is: " + (x-y));}}

else 
if (t.equals("x") || t.equals("X")){

if (s.equals("/")) {
System.out.println("\nThe quotient of these numbers is: " + (y/x));}
else 
if (s.equals("-")) {
System.out.println("\nThe difference of these numbers is: " + ((y-x)));}}
}

public static void  main (String [] args) throws IOException {

num1();
num2();
calculation();

}

}

Je continue à obtenir cette erreur dans ce qui devrait être mon résultat final, qui est simplement le résultat des calculs effectués.

voici l'erreur :" Exception dans le thread "main" java.lang.ArithmeticException : / par zéro at calling.calculation(calling.java:44) at calling.main(calling.java:64)"

2voto

Michael Petrotta Points 35647

Comme il s'agit probablement d'un devoir à la maison, je vais vous donner un indice pour vous mettre sur la bonne voie.

Lorsque vous exécutez votre programme, vous exécutez num1 y num2 pour collecter les valeurs de x y y de l'utilisateur. A l'intérieur de num2 , y est déclarée comme une variable locale. Qu'arrive-t-il à cette variable lorsque num2 retourne ? Et qu'est-ce que cela implique pour le champ (variable) de la classe ? y déclarée à la ligne 7 ?

C'est également le bon moment pour apprendre à utiliser un débogueur. Placez un point d'arrêt à la ligne 44, et voyez quelles sont les valeurs de x y y sont.

0voto

Joe Points 34413

Vous devez vous assurer que le :

int x;
int y;

sont ceux que vous voulez. Les entiers prennent la valeur zéro par défaut lorsqu'ils sont statiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X