我仍然是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;
}
答案 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;
}