2015-08-28 71 views
0

我已經定義了兩個2D陣列hhh。我想給hh分配新值。對於特定k',我想hh(k',j)=1,如果條件如何在fortran中退出「repeat until loop」?

h(k',j)>0 

是真實的;並且一旦條件爲假,即h(k',j')<0,則對於任何j>j'hh(k',j)=0。我用下面的DO WHILE循環:

do k=1, npair 
    do j =1, movie 
     hh(k,j)=0.0 
    enddo 
    enddo 

    do k=1, npair 
    do j =1, nmovie 
     do while (h(k,j)>0) 
     hh(k,j)=h(k,j) 
     enddo 
    enddo 

但如果條件(h(k,j)>0)永遠是真實的,會有一個無限循環!你能否建議如何實施它?

+1

'h'會改變嗎?爲什麼不循環並且一次性設置值呢? – Ross

+0

@Ross'h'不會改變。我想根據條件用'h'的值來獲得'hh'。對不起,你能解釋一下'hh'這個詞的意思嗎? – jiadong

+0

請參閱下面的答案,但'循環'2D數組涉及兩個循環。在兩個循環內部,你可以用'hh(k,j)'來完成任何事情,最終會爲每個可能的'k'和'​​j'組合完成。 – Ross

回答

1

在我看來,你可以設置hh的每個值給定值h。我也假設hhh是相同的大小。所以你應該爲每個元素在hh中提供do。我推薦以下內容:

do k=1,N1 ! N1 and N2 are the limits of the hh and h array. 
    do j=1,N2 
     if (h(k,j) > 0) then ! Check the condition for a specific element in h 
     hh(k,j) = 1 
     else 
     ! -- We need to set *all* values in the desired range 
     hh(k,j:N2) = 0 

     ! -- And we need to stop loop from overwriting values hh(k,j+1), for example 
     ! -- So we break out of the j loop 
     exit 
     endif 
    enddo 
enddo 

您應該檢查以確保它符合您的想法。請注意,我使用冒號表示法在hh數組中指定一個值範圍。 此外,你不清楚如果h(k,j)是0,會發生什麼。

+0

這正是我想要做的。 if語句避免了無限循環。感謝@羅斯。 – jiadong