在继续代码之前,我需要使用IF条件来确定数组(A)中的整数是否与另一个数组(B)中的整数匹配。数组的长度不等,并且包含唯一的值,它们都是正的。
我知道我可以通过以下方法找到匹配的值:
DO I = 1,SIZE(A)
Match(J)=(ANY(A(I)==B))然而,这种格式不被IF...THEN构造所接受。我还没有找到一种方法来实现它的在线和通用测试。我在这里错过了什么?
编辑:作为另一种选择,我尝试了以下代码:
INTEGER :: I , K, B(900),C(900),I1,ID3, IP
INTEGER, INTENT(IN) :: A, N
OPEN(12,FILE='../B.dat')
DO I=1,817
READ(12,*)B(I),C(I)
END DO
DO I = 1,SIZE(A)
DO K = 1,SIZE(B)
IF (I.EQ.K) THEN
DO IP = N-9,N
ID3 = I1 +A*(IP-1)
END DO
END DO
END DO但是,K在整个循环中都会发生变化,因此代码不适用于匹配。然后我试着:
DO I = 1, SIZE(A)
I1 =ID(I)
DO IP = N-9,N
ID3 = I1 +A*(IP-1)
END DO但是,我收到了一个分段错误:
|C:\TELEMAC\VEG\May\PRIVEtest.cas_2018-05-02-16h57min04s\out_testMedit.exe运行码::_____________运行代码::\这个错误的回溯:|#0 ffffffffffffffff ~~
发布于 2018-05-03 02:40:05
你的例子中有太多不相关的变量,同时又没有给我们适当评估你想要的东西的信息。
如果您只想检查两个可能大小不相等的数组A和B是否至少共享一个元素,则可以使用以下构造:
any([(any(A(i) == B), i = 1, size(A))])让我们来详细介绍一下:
any(A(i) == B)这将检查A的th元素是否在B中的任何位置。返回逻辑。然后为A的所有元素创建一个临时数组。
[(any(A(i) == B), i = 1, size(A))]然后,只需设置一个any(),就可以在IF语句中使用它:
program my_any
implicit none
integer :: A(3), B(4), i
A = [1, 2, 3]
B = [6, 3, 4, 10]
if (any([(any(A(i) == B), i=1, size(A))])) then
print *, "YES"
else
print *, "NO"
end if
end program my_anyhttps://stackoverflow.com/questions/50137491
复制相似问题