2012-04-24 3 views
1

Каждый раз, когда я вызываю set(), он сбрасывает все значения в массиве в значение false, за исключением того, что когда-либо было int int col, потому что я устанавливал значение true перед тем, как заканчивается метод. Почему это происходит? Я думал, что делаю копию массива B, а затем устанавливаю значения, которые находятся в A, в значения в B? Или я ошибаюсь здесь.Каждый раз, когда я запускаю этот метод, мой массив сбрасывается

public void set(int row, int col) throws IndexOutOfBoundsException { 
    if (row >capacityr) {    
     boolean B[][] = new boolean[row+1][capacityc+1]; 
     for (int k = 0; k < capacityr; k++) 
      for (int j = 0; j < capacityc; j++) 
       B[k][j] = a[k][j];     

     capacityr=row; 
     a = B; 
    } 

    if (col >capacityc) {    
     boolean C[][] = new boolean[capacityr+1][col+1]; 
     for (int k = 0; k <capacityr; k++) 
      for (int j = 0; j < capacityc; j++) 
       C[k][j] = a[k][j];     

     capacityc=col; 
     a = C; 
    }  

    a[row][col] = true; 
    pT++;     
}    
+0

Таким образом, если вы хотите установить значение индекса, которое находится вне емкости массива верно, то это позволит расширить матрицу, чтобы включить этот индекс – Slowbro

+0

вы должны использовать родной массив. Было бы проще, если бы вы использовали 2D 'ArrayList', например' ArrayList > ', который будет расти для размещения текущего количества элементов. – twain249

+0

Я использую другой интерфейс для использования Arraylist. Но для меня это большой вызов. – Slowbro

ответ

1

Должно быть проще использовать ArrayList, но я думаю, что это исправит вашу проблему.

public void set(int row, int col) throws IndexOutOfBoundsException { 
    if(row > capacityr) { 
     if(col > capacityc) { 
     //both row and col are too big 
     boolean temp[][] = new boolean[row+1][col+1]; 

     //copy a 
     for(int i = 0; i <= capacityr; i++) { 
      for(int j = 0; j <= capacityc; j++) { 
       temp[i][j] = a[i][j]; 
      } 
     } 

     //set all the new elements to false 
     for(int i = capacityr+1; i <= row; i++) { 
      for(int j = capacityc+1; j <= col; j++) { 
       temp[i][j] = false; 
      } 
     } 

     //set row and col and a to temp 
     temp[row][col] = true; 
     a = temp; 

     //update capacity 
     capacityr = row; 
     capacityc = col; 
     } 
     else { 
     //just row is too big 
     boolean temp[][] = new boolean[row+1][capacityc+1]; 
     for(int i = 0; i <= capacityr; i++) { 
      for(int j = 0; j <= capacityc; j++) { 
       temp[i][j] = a[i][j]; 
      } 
     } 

     for(int i = capacityr+1; i <= row; i++) { 
      temp[i][capacityc] = false; 
     } 
     temp[row][col] = true; 
     a = temp; 
     capacityr = row; 
     } 
    } 
    else { 
    if(col > capacityc) { 
     //just col is too big 
     boolean temp[][] = new boolean[capacityr+1][col+1]; 
     for(int i = 0; i <= capacityr; i++) { 
      for(int j = 0; j <= capacityc; j++) { 
       temp[i][j] = a[i][j]; 
      } 
     } 

     for(int j = capacityc+1; j <= col; j++) { 
      temp[capacityr][j] = false; 
     } 
     temp[row][col] = true; 
     a = temp; 
     capacityc = col; 
    } 
    else { 
     //neither are too big 
     a[row][col] = true; 
    } 
    } 
} 
Смежные вопросы