在执行以下代码时:
Dim brr() As Variant
ReDim brr(1 To 1, 1 To 12)
brr(1, 1) = "A" ' 为例子,给第一个元素赋值为A
ReDim Preserve brr(1 To 2, 1 To 12) ' 仅扩展第一维的大小
出现了下标越界的问题。这是由于在重定义数组维度时,只扩展了第一维的大小,所以原数组中的所有元素都被保留了下来,但在新的维度中,第二维的大小没有改变,所以新数组中第二行的所有元素都未被初始化。可以通过以下代码来初始化第二行:
'初始化第二行
For i = 1 To 12
brr(2, i) = 0 '这里可以修改为默认值,如“”
Next i
然后可以用以下代码检查数组是否有2行:
Debug.Print UBound(brr, 1)
Debug.Print UBound(brr, 2)
优化你个head啊,这是vb,优化成java问题了?
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以提供解决数组维度重定义所导致的下标越界问题的Java代码:
int[][] arr = new int[2][3]; for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) { arr[i][j] = i + j; } } // 以上是原数组初始化代码 int[][] newArr = new int[arr.length + 1][3]; for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) { newArr[i][j] = arr[i][j]; } } // 以上是将原数组复制到新数组中的代码 for(int j = 0; j < newArr[1].length; j++) { newArr[arr.length][j] = arr[0][j] - 1; // 对第二行进行初始化,这里以第一行-1作为示例 }
if(newArr.length == 2) { System.out.println("数组有2行。"); } else { System.out.println("数组无2行。"); }
具体解决方法是创建一个新的二维数组,将原数组复制到新数组中,并将新数组中的第二行进行初始化。此处我选择将第二行的元素全部设为第一行的某一个元素-1。最后判断新数组的长度是否为2即可知道是否有2行。