在二进制搜索算法错误方面需要帮助

Eur*_*ust 2 algorithm fortran binary-search fortran95

使用g95编译器,我有一个错误:

Error: Operands of comparison operator '.EQ.' at (1) are LOGICAL(4)/LOGICAL(4)
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么意思.我包括子程序.你有任何想法如何解决这个问题?

非常感谢你的时间.

  SUBROUTINE search(iarray, ItemSought, Found, Location)
CHARACTER(20), DIMENSION(50),INTENT(IN)::itemarray
CHARACTER(20)::ItemSought
LOGICAL, INTENT(OUT)::Found
INTEGER, INTENT(OUT)::Location
INTEGER:: First, Last, Middle

WRITE(*,'(1x,A)',ADVANCE="NO"),"What are you searching for? "
READ*, ItemSought

First=1
Last=SIZE(Iarray)
FOUND = .FALSE.

DO
    IF ((First > Last) .OR. Found) RETURN
        Middle = (First+Last)/2
    IF (ItemSought < Iarray(Middle)) THEN
        Last=Middle-1
    ELSE IF (ItemSought > Iarray(Middle)) THEN
        First=Middle+1
    ELSE
        Found = .TRUE.
        Location = Middle
    END IF
END DO


IF (Found == .TRUE.) THEN
PRINT*, Itemsought

END SUBROUTINE
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 6

我不会承认我最后一次使用FORTRAN,但它看起来确实与我记忆中有很多不同.所以这只是猜测.

根据错误消息,我会说它在这一行(你没说哪个):

IF (Found == .TRUE.) THEN
Run Code Online (Sandbox Code Playgroud)

再次猜测,您通常不会通过比较true/false来测试逻辑值,而是直接使用它:

IF (Found) THEN
Run Code Online (Sandbox Code Playgroud)


ste*_*ert 5

.EQ.(或==)关系运算符,就像.NE.(/=), (.LT.)<等,仅用于比较数字,比较你应该使用逻辑值.EQV..NEQV.