线性搜索和短路评估(运行时错误)

时间:2016-05-02 22:10:52

标签: algorithm data-structures linked-list runtime-error linear-search

我正在学习计算机科学(远程学习),并对一个额外的信息问题感到困惑"出现在教科书中,但没有答案。它涉及线性搜索算法和短路评估。

书中的线性搜索算法如下:

指针= 0
WHILE指针< LengthOfList AND list [pointer]!= searchingfor:
      ------将一个添加到指针
ENDWHILE

IF指针> = LengthOfList那么:
-------打印("项目不在列表中#34;)
ELSE
    -------打印("项目位于" +指针)
ENDIF

在额外信息框中,它讨论了短路评估以及当布尔运算符链接多个部分时,如果有必要,计算机仅评估第二个条件。所以我得到条件1和条件2(当使用短路评估时)如果条件1为假,则不会评估条件2。

然后,它会问:"如果在线路中没有使用短路评估,你能否发现可能发生的运行时错误:

WHILE指针< LengthOfList AND list [pointer]!=搜索"

我已经搜索并搜索了一个答案,并在过去的两周内一遍又一遍地使用不同的项目在纸上运行算法,但我无法理解运行时错误可能是什么。有谁可以看看他们是否能发现这个错误并向我解释?非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为这个问题需要重新评估。首先,让我们定义短路评估。短路评估是使用布尔运算符,例如&&(AND运算符)和||(OR运算符),因此只需要检查两个参数中的一个论点。例如,请考虑AB是条件的这些示例

if(A && B)

根据短路评估,如果A为假,则无需检查B,因为A && B的总体结果为假,无论B是什么,if语句的主体将是跳过。

if(A || B)

根据短路评估,如果A为真,则无需检查B,因为A || B的总体结果为真,无论B是什么,if语句的主体是执行。

现在的问题是,如果使用 NOT 短路评估会发生什么。所以问题只是询问不同编写算法的错误(注意上面写的算法完全没问题)。本质上,如果每次迭代都检查while循环中的两个条件,会发生什么错误?因为现在,防止运行时错误的是在最后一次迭代中,只有第一次检查条件以防止ArrayIndexOutOfBoundsException。如果while循环的最后一次迭代检查了两个条件,那么会发生运行时错误,因为程序试图访问超出数组边界的元素。