2016-05-11 2 views
-6

Je suis encore très jeune avec Java et j'ai du mal à comprendre pourquoi mon code retourne "false" quand modulo n'est pas égal à 0, ignorant les deux autres cas, donc quand divisor vaut 0 et quand le tableau est vide.OR logique en Java ne fonctionne pas?

En cas de Diviseur = 0, je reçois java.lang.ArithmeticException: division par zéro Pour une raison quelconque tableau vide est divisible par 0, comment cela pourrait être?

Toute aide très appréciée, merci!

public boolean Divisible(ArrayList<Integer> array1, int divisor) { 

    int i; 
    int modulo; 
    boolean isDiv=true; 

    for(i=0; i<arr.size(); i++){ 
     modulo=((arr.get(i)%divisor)); 
     i++; 

     if(modulo!=0 || divisor==0 || arr.isEmpty()) 
     { 
      isDiv= false; 
      break; 
     } 
    } 
    return isDiv; 
} 
+3

Il est impossible de diviser par 0 ... Et exécuter quelque chose avec des paramètres donnés et ** ensuite ** vérifier si elles sont correctes est en quelque sorte ... inutile, n'est-ce pas? – Seth

+2

Quel est le but de la vérification 'arr.isEmpty()'? Si vous avez entré 'for', le tableau n'est pas vide. –

+2

Si la liste est vide, le code de la boucle for ne sera jamais exécuté. – matt

Répondre

1

Avant de ne rien vérifier une liste vide ou un 0 diviseur.

if(divisor==0||array1.isEmpty()){ 
    return false; 
} 

Ensuite, vous pouvez vérifier la liste.

for(Integer i: array1){ 
    if(i%divisor!=0){ 
     return false; 
    } 
} 

Enfin.

return true; 
0

Le principal problème est que vous exécuter OU vérifier l'intérieur de la boucle, mais si la boucle for 0 fois la condition est jamais vérifié, donc le problème que vous rencontrez.

Voici une version modifiée de votre fonction, où je me suis déplacé les conditions de contrôle en dehors de la boucle:

public boolean Divisible(ArrayList<Integer> array1, int divisor) 
{ 
    int i; 
    int modulo; 
    boolean isDiv = true; 

    if(array1.isEmpty()) // Check array1.isEmpty() outside for loop. 
    { 
     isDiv = false; 
    } 
    else if(divisor == 0) // Check divisor outside for loop. 
    { 
     isDiv = false; 
    } 
    else 
    { 
     for(i = 0; i < arr.size(); i++) 
     { 
      modulo = (arr.get(i) % divisor); 
//   i++; i is already increased by for instruction. 

      if(modulo!=0 /*|| divisor==0 || arr.isEmpty()*/) // Only modulo must be checked here. 
      { 
       isDiv= false; 
       break; 
      } 
     } 
    } 

    return isDiv; 
}