2016-05-11 16 views
-6

Ich bin immer noch sehr neu in Java und ich habe ein wenig zu kämpfen versuchen zu verstehen, warum mein Code nur "falsch" zurückgibt, wenn Modulo nicht gleich 0 ist, die beiden anderen Fälle ignorieren, also wenn Divisor 0 ist und wenn das Array ist leer.logisches ODER in Java funktioniert nicht?

Im Falle von Divisor = 0, bekomme ich java.lang.ArithmeticException: dividiere durch Null Aus irgendeinem Grund leere Array ist teilbar durch 0, wie könnte das sein?

Jede Hilfe sehr geschätzt, danke!

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

Es ist nicht möglich durch 0 zu teilen ... und Ausführung etwas mit den angegebenen Parametern und ** danach ** zu überprüfen, ob sie korrekt sind, ist irgendwie ... sinnlos, würden Sie nicht zustimmen? – Seth

+2

Was ist der Sinn des 'arr.isEmpty()' Checks? Wenn Sie das 'for' eingegeben haben, ist das Array nicht leer. –

+2

Wenn die Liste leer ist, wird der Code in der for-Schleife nie ausgeführt. – matt

Antwort

1

Bevor Sie etwas tun, überprüfen Sie eine leere Liste oder einen 0-Teiler.

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

Dann können Sie die Liste überprüfen.

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

Endlich.

return true; 
0

Das Hauptproblem ist, dass Sie die OR überprüfen innerhalb der for-Schleife sind ausgeführt wird, aber wenn die für Schleife wiederholt 0 mal die Bedingung nie aktiviert, so dass das Problem bei Ihnen auftritt. Hier

ist eine modifizierte Version Ihrer Funktion, wo ich die Kontrollbedingungen außerhalb der for-Schleife bewegt:

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; 
}