我正在学习计算机科学(远程学习),并对一个额外的信息问题感到困惑"出现在教科书中,但没有答案。它涉及线性搜索算法和短路评估。
书中的线性搜索算法如下:
指针= 0
WHILE指针< LengthOfList AND list [pointer]!= searchingfor:
------将一个添加到指针
ENDWHILE
IF指针> = LengthOfList那么:
-------打印("项目不在列表中#34;)
ELSE
-------打印("项目位于" +指针)
ENDIF
在额外信息框中,它讨论了短路评估以及当布尔运算符链接多个部分时,如果有必要,计算机仅评估第二个条件。所以我得到条件1和条件2(当使用短路评估时)如果条件1为假,则不会评估条件2。
然后,它会问:"如果在线路中没有使用短路评估,你能否发现可能发生的运行时错误:
WHILE指针< LengthOfList AND list [pointer]!=搜索"
我已经搜索并搜索了一个答案,并在过去的两周内一遍又一遍地使用不同的项目在纸上运行算法,但我无法理解运行时错误可能是什么。有谁可以看看他们是否能发现这个错误并向我解释?非常感谢。
答案 0 :(得分:0)
我认为这个问题需要重新评估。首先,让我们定义短路评估。短路评估是使用布尔运算符,例如&&
(AND运算符)和||
(OR运算符),因此只需要检查两个参数中的一个论点。例如,请考虑A
和B
是条件的这些示例
if(A && B)
根据短路评估,如果A为假,则无需检查B,因为A && B
的总体结果为假,无论B是什么,if语句的主体将是跳过。
if(A || B)
根据短路评估,如果A为真,则无需检查B,因为A || B
的总体结果为真,无论B是什么,if语句的主体是执行。
现在的问题是,如果使用 NOT 短路评估会发生什么。所以问题只是询问不同编写算法的错误(注意上面写的算法完全没问题)。本质上,如果每次迭代都检查while循环中的两个条件,会发生什么错误?因为现在,防止运行时错误的是在最后一次迭代中,只有第一次检查条件以防止ArrayIndexOutOfBoundsException
。如果while循环的最后一次迭代检查了两个条件,那么会发生运行时错误,因为程序试图访问超出数组边界的元素。