Java 每次运行此方法时,我的数组都会重置
每次调用set()时,它都会将数组中的所有值重置为false,除了int row int col是什么,因为我在方法结束之前将其设置为true。为什么会发生这种情况?我以为我是在复制数组B,然后将a中的值设置为B中的值?还是我弄错了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[][] =
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,它将扩展矩阵以包含该索引,因此您必须使用本机数组。如果您使用2DArrayList
之类的ArrayList
,这将更容易,因为它将增长以适应当前的元素数。实际上,我是实现我的接口的另一个用途是使用Arraylist。但这对我来说是一个很大的挑战。这样,如果你想将数组容量之外的索引值设置为true,它将扩展矩阵以包含该索引,因此你必须使用本机数组。如果你使用2DArraylist
lik,这将更容易eArrayList
,因为这将增加以适应当前的元素数量。实际上,我正在实现我的接口的另一个用途来使用ArrayList。但这对我来说是一个巨大的挑战。