对于循环逻辑运行,但没有意义

时间:2018-11-14 06:29:33

标签: java for-loop

  

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();

            }
        }

2 个答案:

答案 0 :(得分:1)

您当前的代码是错误的,但是由于以下原因它仍然可以工作:

  • 如果您传递有效索引(0到6之间),则index > 1 - VisitProcedure.lengthtrue(由于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();

}