Java 中的逻辑或不起作用?

logical OR in Java not working?

我对 Java 还是很陌生,我正在努力理解为什么当模数不等于 0 时我的代码只 return "false",而忽略了另外两种情况,即当除数为 0 且数组为空时。

如果除数 = 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;
}

在你做任何事情之前检查一个空列表或一个 0 除数。

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

然后你可以查看列表。

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

终于。

return true;

主要问题是您在 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;
}