2015-10-04 154 views
0

我有以下代碼C++邏輯與運算

for (int i = 0; i < 4; i++) { 
      for (int j = 0; (j < 4) && (j != i); j++) { 
        cout << j << "," << i; 
      } 
      cout << "\n"; 
    } 

輸出:

(0,1) 
    (0,2)(1,2) 
    (0,3)(1,3),(2,3) 

我希望它打印所有對除匹配的:

(1,0)(2,0)(3,0) //without (0,0) 
    (0,1)(2,1)(3,1) //without (1,1) 
    (0,2)(1,2)(3,2) //without (2,2) 
    (0,3)(1,3)(2,3) //without (3,3) 

當for循環中的條件更改爲(j < 4) && (j == i) // output: (0,0) 它只打印(0,0)而不是所有的匹配對。我知道它與&&有關,但爲什麼它不顯示其他對,因爲我預期它?

+0

當條件變爲false時,循環將停止。你試圖一次做兩件事。 – EJP

回答

0

for循環的工作原理是從初始化一個變量開始。 (初始化;例如i = 1)

然後,第二個命令是一個布爾語句,如果爲false,則會暫停for語句。 (例如< 10)

第3條語句告訴for循環當布爾語句爲真時該怎麼做。 (例如:增量I,I = I + 1)

然而,在你的病情,你寫(j < 4)& &(j!= 1),所以每當你j和i相等,你立即停止執行第二個嵌套for循環!

您可以添加一個if語句來緩解這個問題,但你也可以使用continue語句,之後將跳過任何東西,當值相等(沒有完全停止的循環):

for(int i = 0; i < 4; i++) 
{ 
    for(int j = 0; j < 4; j++) 
    { 
    if(i == j) continue; 
    cout << j << "," << i; 
    } 
} 

這是一個現場演示: https://ideone.com/Q9oe4I

1

我希望它打印所有對除匹配那些

然後用j < 4取代(j < 4) && (j != i)並添加內環內的if聲明。

1

運行for循環,直到第一次終止條件變爲false。這就是爲什麼它被稱爲終止條件。