简单的地图绘图问题

时间:2013-10-13 16:23:57

标签: c++

我编写了一个简单的地图绘图程序,但有一些我无法识别的错误。

  1. 该错误仅在X坐标为正时发生,在其为负值时才会发生。
  2. 当我的范围仅为11时,为什么会打印最后一列圆点?
  3. 以下是代码:

    int xRange = 11;
    int yRange = 11;
    string _space = "   ";
    string _star = " * ";
    
    for( int x = xRange; x > 0; x-- )
    {
        for( int y = 0; y < yRange; y++ )
        {
            int currentX = x - 6;
            int currentY = y - 5;
    
            //demo input
            int testX = 2; //<----------ERROR for +ve int, correct for -ve
            int testY = -4; //<-------- Y is working ok for +ve and -ve int
    
            //Print x-axis
            if( currentY == 0 )
            {
                if( currentX < 0 )
                    cout << currentX << " ";
                else
                    cout << " " << currentX << " ";
            }
            //Print y-axis
            if( currentX == 0 )
            {
                if( currentY < 0 )
                    cout << currentY << " ";
                else
                    //0 printed in x axis already
                    if( currentY != 0 )
                        cout << " " << currentY << " ";
            }
            else if( currentY == testX and currentX == testY )
                cout << _star;
            else
                cout << " . ";
        }
        //print new line every completed row print
        cout << endl;
    }
    

    演示输入的输出(x:2,y:-4):(显示x为3,这是错误的)

     .  .  .  .  .  5  .  .  .  .  .  . 
     .  .  .  .  .  4  .  .  .  .  .  . 
     .  .  .  .  .  3  .  .  .  .  .  . 
     .  .  .  .  .  2  .  .  .  .  .  . 
     .  .  .  .  .  1  .  .  .  .  .  . 
    -5 -4 -3 -2 -1  0  1  2  3  4  5 
     .  .  .  .  . -1  .  .  .  .  .  . 
     .  .  .  .  . -2  .  .  .  .  .  . 
     .  .  .  .  . -3  .  .  .  .  .  . 
     .  .  .  .  . -4  .  .  *  .  .  . 
     .  .  .  .  . -5  .  .  .  .  .  .
    

    演示输入的输出(x:-2,y:4):

     .  .  .  .  .  5  .  .  .  .  .  . 
     .  .  .  *  .  4  .  .  .  .  .  . 
     .  .  .  .  .  3  .  .  .  .  .  . 
     .  .  .  .  .  2  .  .  .  .  .  . 
     .  .  .  .  .  1  .  .  .  .  .  . 
    -5 -4 -3 -2 -1  0  1  2  3  4  5 
     .  .  .  .  . -1  .  .  .  .  .  . 
     .  .  .  .  . -2  .  .  .  .  .  . 
     .  .  .  .  . -3  .  .  .  .  .  . 
     .  .  .  .  . -4  .  .  .  .  .  . 
     .  .  .  .  . -5  .  .  .  .  .  .
    

    任何人都可以帮助识别我的代码中的两个问题吗?感谢。

2 个答案:

答案 0 :(得分:2)

if( currentY == testX and currentX == testY )

这看起来不对。你不应该把X比作X和Y比Y吗?

仔细观察,这一切都更加陌生。您的外部循环生成行,但您使用x对其进行索引。 Inner循环为每一行生成列,并使用y对其进行索引。关于哪个轴是X轴而哪个轴是Y轴,一般会产生混淆。

编辑:啊,我现在看到了问题。当currentY == 0时,您打印轴的数字,打印点。

答案 1 :(得分:1)

问题在于,当您打印Y轴时,仍然会打印一个点,因此y轴右侧的所有内容都会移动1.您应该在那里有另一个else

if( currentY == 0 )
{
    ....
}
else if (currentX == 0)  // <--- add an else there
{
    ....
}
else if ...