2016-05-11 2 views
-6

私はJavaにまだまだ慣れていませんし、モジュロが0に等しくない場合、2つの他の場合を無視するので、コードが "false"を返してしまう理由を理解しようと少し苦労しています。空です。Javaの論理ORは機能していませんか?

除数= 0の場合、java.lang.ArithmeticException:0で割る 何らかの理由で空の配列ISが0で割り切れるのはどうですか?

ご協力いただきありがとうございます。

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

0で割ることはできません...そして、与えられたパラメータを使って何かを実行して**その後、**彼らが正しいかどうかをチェックするのは一種です...無意味です、あなたは同意しませんか? – Seth

+2

'arr.isEmpty()'チェックのポイントは何ですか? 'for'を入力した場合、配列は空ではありません。 –

+2

Listが空の場合、forループ内のコードは決して実行されません。 – matt

答えて

1

何かをする前に空のリストまたは0除数を確認してください。

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

リストを確認することができます。

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

最後に、

return true; 
0

主な問題は、あなたが実行したり、forループ内でチェックしているということですが、ループを反復処理のための0回の条件がチェックされることはありません場合は、あなたが経験している問題。ここで

は私がforループの外にチェック条件を移動し、あなたの関数の修正版です:

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; 
} 
関連する問題