Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次运行此方法时,我的数组都会重置_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 每次运行此方法时,我的数组都会重置

Java 每次运行此方法时,我的数组都会重置,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,每次调用set()时,它都会将数组中的所有值重置为false,除了int row int col是什么,因为我在方法结束之前将其设置为true。为什么会发生这种情况?我以为我是在复制数组B,然后将a中的值设置为B中的值?还是我弄错了 public void set(int row, int col) throws IndexOutOfBoundsException { if (row >capacityr) { boolean B[][] =

每次调用set()时,它都会将数组中的所有值重置为false,除了int row 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++;                   
}            
public void set(int行,int列)引发IndexOutOfBoundsException{
如果(行>容量){
布尔值B[][]=新布尔值[row+1][capacityc+1];
对于(int k=0;k电容){
布尔值C[][]=新布尔值[capacityr+1][col+1];

对于(int k=0;k来说,使用
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;
     }
  }
}
public void set(int行,int列)引发IndexOutOfBoundsException{
如果(行>容量年){
如果(列>容量){
//row和col都太大了
布尔临时值[][]=新布尔值[行+1][列+1];
//抄袭

对于(int i=0;i来说,使用
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;
     }
  }
}
public void set(int行,int列)引发IndexOutOfBoundsException{
如果(行>容量年){
如果(列>容量){
//row和col都太大了
布尔临时值[][]=新布尔值[行+1][列+1];
//抄袭

对于(int i=0;i这样,如果您想将数组容量之外的索引值设置为true,它将扩展矩阵以包含该索引,因此您必须使用本机数组。如果您使用2D
ArrayList
之类的
ArrayList
,这将更容易,因为它将增长以适应当前的元素数。实际上,我是实现我的接口的另一个用途是使用Arraylist。但这对我来说是一个很大的挑战。这样,如果你想将数组容量之外的索引值设置为true,它将扩展矩阵以包含该索引,因此你必须使用本机数组。如果你使用2D
Arraylist
lik,这将更容易e
ArrayList
,因为这将增加以适应当前的元素数量。实际上,我正在实现我的接口的另一个用途来使用ArrayList。但这对我来说是一个巨大的挑战。