我正在尝试用.or.
循环中的if
语句替换do
语句。但是当使用第二种方法时,我没有在第一种方法中得到结果。
我在这里做错了吗?
do j =1,115
if (positions(i,1) .eq. j) .or. positions(i,2) .eq. j)then
write(24,201) 47, atoms(j,2),atoms(j,3),atoms(j,4)
endif
enddo
do j =1,115
do m =1,2
if (int(positions(i,m)) .eq. j)then
write(24,201) 47, atoms(j,2),atoms(j,3),atoms(j,4)
endif
enddo
enddo
答案 0 :(得分:1)
您提供的两个陈述在逻辑上是不同的(忽略仅在第二种情况下发生的转换为int
):
在第一个代码段中,如果第一个或第二个条件为真,则打印一行,从而产生一行输出或无。
在第二种情况下,您执行两次检查,每次检查可以打印到单位24
。如果两个条件均为真,则会得到两行输出行。
如果您想简化第一个语句,您可以例如使用any
:
do j=1,115
if ( any(positions(j,1:2) == j) ) then
write(24,201) 47, atoms(j,2),atoms(j,3),atoms(j,4)
endif
enddo
请注意,我使用循环计数器i
替换了循环中的j
,因为没有迹象表明可以定义i
。当然,这是纯粹的猜测。