Java中的逻辑OR不起作用?

时间:2016-05-11 12:14:22

标签: java modulo

我仍然是Java的新手,我正在努力理解为什么当模数不等于0时我的代码只返回“false”,忽略其他两种情况,所以当除数为0时和数组是空的。

如果divisor = 0,我得到java.lang.ArithmeticException:除以零 由于某种原因,空数组可以被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;
}

2 个答案:

答案 0 :(得分:1)

在执行任何操作之前,请检查空列表或0除数。

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

然后你可以查看清单。

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

最后。

return true;

答案 1 :(得分:0)

主要问题是你在for循环中执行OR检查,但是如果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;
}