VisitProcedure.length等于7
因此由于某种原因,此方法可以按我的要求工作。但是逻辑对我来说毫无意义。我有一个 7 数组,我希望用户键入索引 0-6 的某些部分,它将显示该索引处的值。如果他们输入的数字超出范围,则会引发异常。但这就是我阅读if语句逻辑的方式
如果索引小于0或索引大于6,则执行此操作 (p = VisitProcedure [index] .getProcedure(); //显示索引
但是相反。当我选择 0-6 时,它将在该索引处显示数组的值。而当我做其他事情时,它超出索引范围。另外当我尝试不同的逻辑
如果索引大于等于0,小于等于7,则这样做
我仍然遇到错误。但是基本上一切都很好,这对我来说没有任何意义。
public Procedure GetByIndex(int index)throws ArrayIndexOutOfBoundsException {
Procedure p;
if (index < 0 || index > 1 - VisitProcedure.length) { //switching 1 - to - 1 still doesnt work
p = VisitProcedure[index].getProcedure();
return p;
}
else{
ArrayIndexOutOfBoundsException ar;
ar = new ArrayIndexOutOfBoundsException();
throw ar;
//throw new ArrayIndexOutOfBoundsException();
}
}
答案 0 :(得分:1)
您当前的代码是错误的,但是由于以下原因它仍然可以工作:
如果您传递有效索引(0到6之间),则index > 1 - VisitProcedure.length
为true
(由于1 - VisitProcedure.length
为负),因此if条件为{{1} },然后返回true
。
如果传递无效的VisitProcedure[index].getProcedure()
或index > 6
,则条件仍然为index < 0
,访问数组的无效索引将引发true
(即仍会抛出,但不会被ArrayIndexOutOfBoundsException
子句抛出。)
换句话说,您的条件始终为else
,因此您的代码等效于:
true
答案 1 :(得分:0)
If(index>0 && index<=VisitProcedure.length-1){
//if index is greater than 0 and less than or equal to index 6
p = VisitProcedure[index].getProcedure();
return p;
}else{
ArrayIndexOutOfBoundsException ar;
ar = new ArrayIndexOutOfBoundsException();
throw ar;
//throw new ArrayIndexOutOfBoundsException();
}