2013-03-07 97 views
-1

所以我一直在這個程序的一部分工作了幾個小時。我有幾行代碼已經讓我困惑了一個多小時。這只是沒有意義。我一遍又一遍地讀出這些句子,並在腦海中思考它應該做什麼,但它並沒有這樣做!這可能是我忽略的一個愚蠢的錯誤(通常發生在我身上),或者它可能是由於睡眠不足/過去幾個小時不斷對它進行工作。爲什麼代碼的順序無法正常工作?

該程序相當長,但我遇到的代碼塊只有幾行 - 所以我只會發布整個東西,如果需要的話。


好了,所以這裏是一個快速運行的這是什麼應該做下來:

我有一個載體,充滿了與手動設置字符串(19,各爲79個字符)。這個1維矢量將被視爲2d矢量 - 因爲我試圖保持它的基本。所以這個字符串向量,如果每行顯示1個字符串,本質上會創建一個帶有矩形部分'。'的網格。和連接矩形部分的'#'的路徑。它應該得到一個x和y座標,並傳遞給該函數。它像二維矢量一樣循環並找到位置。它檢查該位置的char是否不是'。'或'#',否則它會將字符更改爲X以標記其位置。我使用一個有效的x,y座標來設置測試,該座標是'。'的位置。 - 問題是在我的cout「match found :::」行後面,當程序運行時,它顯示vLevel [i] [j] ='。'的值。但出於某種原因,它不會去else函數被調用4次以上,我把cout語句。下面是網格的樣子。白色空間是空間..每一行是向量的字符串:

.......                  
....... .......               
.......##.......  ..........................       
....... .......  ..........................       
     .......  ..........................  ..........    
     .......  ..........................#####..........    
         ..........................  ..........    
         ..........................   #    
         ..........................   #    
         #         #    
         #         #    
    ........   # ............    .......    
    ........   # ............    .......    
    ........   # ............ ....  .......    
    ........###############............ ....  .......    
    ........    ............####....        
    ........    ............ ....        

繼承人的代碼段我處理:

void markPosition(vector<string> & vLevel, int x, int y){ 
    cout << "x: " << x <<endl; 
    cout << "y: " << y <<endl; 

    bool doubleCheck = true; //extra bool I added for testing purposes 

    for(int i = 0; i < vLevel.size(); i++){ 
      for(int j = 0; j < vLevel[i].size(); j++){ 
        //displays if x and/or y are out of range 
        if (doubleCheck){ 
          if ((x < 0) || (x > vLevel[i].size())){ 
            cout << "X is out of range!" << endl; 
            doubleCheck = false; 
          } 
          if ((y < 0) || (y > vLevel.size())){ 
            cout << "Y is out of range!" << endl; 
            doubleCheck = false; 
          } 
        } 
        else { 
          return; 
        } 

        if ((j == x) && (i == y)){ 
    //////THIS IS THE PROBLEM LOL 
          cout << "match found::: " << vLevel[i][j] << endl; 
          if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')){ 
            cout << "Located in the blankness" << endl; 
            return; 
          } 

          else { 
            cout << "I don't get reached!!??" << endl; 
            vLevel[i][j] = 'X'; 
            markPosition(vLevel,i-1,j); 
            markPosition(vLevel,i+1,j); 
            markPosition(vLevel,i,j+1); 
            markPosition(vLevel,i,j-1); 
          } 
         } 
       } 
     } 
} 

的間距得到了粘貼時會搞砸,所以我試着把它清理一下。我不明白爲什麼它跳過別的。就像我說的,一旦這個問題得到解決,我相信我會覺得啞巴。我需要睡覺哈哈。

讓我知道你是否需要更多信息。先謝謝了!

回答

3

看:

if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')) 

這將總是評估爲true。想想看。

(我想你的意思if((!=)&&(!=))if(!((==)||(==)))。)

+1

誰遺忘的德·摩根定律另一個程序員。 :) – Barmar 2013-03-07 03:05:24

+0

該死的太慢了。在我的手機上閱讀它,但必須登錄到計算機才能正確剪切和粘貼。 +1爲你快速先生。 – 2013-03-07 03:08:37

+0

我不明白大聲笑 – ModdedLife 2013-03-07 03:09:25

相關問題