2013-03-07 83 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