0

我正在學習計算機科學(遠程學習),並且對教科書中出現但沒有答案的「額外信息問題」感到困惑。這是關於線性搜索算法和短路評估。線性搜索和短路評估(運行時錯誤)

的算法書中線性搜索寫成如下:

指針= 0
當箭頭< LengthOfList和列表[指針] = searchedfor:
------添加一個的指針
ENDWHILE

IF指針> = LengthOfList THEN:
------- PRINT( 「項目不是在列表」)
ELSE
------- PRINT(」項目位於「 +指針)
ENDIF


在它談論短路評價,以及如何時,有通過布爾運算符連接多個部分額外的信息框僅計算機,如果有必要評估第二個條件。所以我在條件1和條件2(當使用短路評估時)得到這一點時,條件1不會被評估,如果條件1是假的。

然而,然後要求
「你能找出是否短路計算在在線使用並不可能會出現的運行時錯誤!

當箭頭< LengthOfList和列表[指針] =搜索「

我已搜索並搜索了一個答案,並在過去2周內一遍又一遍地運行了不同項目的紙張算法,但我無法讓我的腦袋發現運行時錯誤可能是什麼。任何人都可以看看他們是否可以發現這個錯誤並向我解釋?非常感謝。

+0

有沒有在這裏引發特定的異常?例如,一個nullpointerexception。或者是輸出的問題? –

回答

0

我認爲這個問題需要在這裏重新評估。首先,我們來定義短路評估。短路評估是使用布爾運算符,如&&(AND運算符)和||(OR運算符),以便由於一個參數的結果而只需檢查兩個參數中的一個。例如,考慮這些例子,其中AB的條件,

if(A && B) 

根據短路計算,如果A是假的,那麼B將永遠不會被檢查自A && B總的結果是假的不管什麼乙是和if語句的正文將被跳過。

if(A || B) 

這裏根據短路計算,如果A是真實的,那麼B將永遠不會被檢查自A || B總的結果是真實的,不管是什麼B和如果執行語句的身體。

現在的問題是要問如果短路評估是不是使用將會發生什麼。所以問題只是詢問一個不同的算法的錯誤(注意你上面寫的算法是完全正確的)。從本質上講,如果在每次迭代中檢查while循環中的兩個條件,會發生什麼錯誤?因爲現在,阻止運行時錯誤的是在最後一次迭代中,只檢查第一個條件以防止ArrayIndexOutOfBoundsException。如果while循環的最後一次迭代檢查了兩個條件,則會發生運行時錯誤,因爲程序試圖訪問位於數組邊界之外的元素。

+0

非常感謝您的解答!程序試圖訪問一個不存在的索引最終是有道理的。讚賞。 – PyVan

+0

無論何時,如果您發現答案有幫助,請務必將其標記爲已接受。保重。 –