2012-03-05 76 views
0

我正在VS2010控制檯應用程序中使用2D數組。我分配陣列例如:分配一個多維數組VSC++

Thing::Thing(int _n, bool _control){ 
    m = _n; 
    control = _control; 
    thisArray = new int*[m]; 
    for(int ii = 0; ii < m; ii++){ 
     thisArray[ii] = new int[m]; 
     for (int jj = 0; jj < m; jj++){ 
      thisArray[ii][jj] = 0; 
     } 
    } 
    if (control == true){ 
     int num = 1; 
     for (int jj = 0; jj < m; jj++){ 
      for (int ii = 0; ii<m; ii++){ 
       if ((jj == (m-1)) && (ii == (m-1))){ 
        std::cout << "inserting " << 0 << 
         "at[" << ii << "][" << jj << "]" << std::endl; 
        thisArray[ii][jj] = 0; 
        std::cout << thisArray[ii][jj] << std::endl; 
       } else{ 
        std::cout << "inserting " << num << 
         "at[" << ii << "][" << jj << "]" << std::endl; 
        thisArray[ii][jj] = num++; 
        std::cout << thisArray[ii][jj] << std::endl; 
       } 
      } 
     } 
     pi.x = m-1; 
     pi.y = m-1; 
    } 
} 

然後我試圖通過

void Thing::display(){ 
    int x = 0; 
    int y = 0; 
    for(; y < m; y++){ 
     for(x = 0; x < m; x++){ 
      if (Point(x, y) == pi){ 
       std::cout << "[ ]"; 
      } 
      std::cout << "[" << thisArray[x][y] << "]"; 
      if (x == m){ 
       std::cout << std::endl; 
      } 
     } 
    } 
} 

顯示它,但它似乎是它僅顯示第一尺寸作爲輸出時我通過在4和真看起來是這樣的:

inserting 1 at[0][0]1 
inserting 2 at[1][0]2 
inserting 3 at[2][0]3 
inserting 4 at[3][0]4 
inserting 5 at[0][1]5 
inserting 6 at[1][1]6 
inserting 7 at[2][1]7 
inserting 8 at[3][1]8 
inserting 9 at[0][2]9 
inserting 10 at[1][2]10 
inserting 11 at[2][2]11 
inserting 12 at[3][2]12 
inserting 13 at[0][3]13 
inserting 14 at[1][3]14 
inserting 15 at[2][3]15 
inserting 0 at[3][3] 0 
[1][2][3][4] 

,當我的陣列添加到我的收藏系統顯示指針指向一個單一的值,然後將只顯示我的第一個元素,而不是所有的元素秒。

它拋出沒有運行時訪問錯誤,或類似的東西,但是當我嘗試顯示數組它只做第一行。注意:我被要求使用實際的二維數組,並且不允許使用預先編寫的庫或單個謊言。

編輯:增加了額外的輸出信息。 EDIT2(解析):在顯示改變了第二個for循環是

for (x = 0; x < m; x++) 

保持值時,向外部for循環確保它們爲圓形迭代復位。

+0

想起來了。這可能是display()方法中的邏輯錯誤,但仍不知道爲什麼它只顯示手錶中的第一個元素。 – gardian06 2012-03-05 00:43:25

回答

2

在您的顯示功能中,您必須在外部y循環的每次迭代中重置x。 它甚至會更清楚,如果你for聲明中所做的初始化:

for(int y = 0; ; y < m; y++){ 
    for(int x = 0; ; x < m; x++){ 

,並查看指針在Visual C++調試一個數組,你可以看看that other question

+0

謝謝我有那些單獨的,所以我可以使用一個點來控制位置,並且必須忘記將第二個循環改爲for(x = 0; x gardian06 2012-03-05 00:52:07