Java 正在合并数组但获取数组索引超出绑定异常
我正在尝试合并两个排序的数组,即检查isJava 正在合并数组但获取数组索引超出绑定异常,java,Java,我正在尝试合并两个排序的数组,即检查isA[I]小于B[j],然后创建一个数组C[k]来存储合并数组的新数组,但我的问题是我得到了一个java.lang.ArrayIndexOutOfBoundsException:如何解决此错误: 最后两个for循环是检查我们是否完成了A和B的比较,一些元素被左移到C。这里我假设A和B是排序的。m和n是数组的大小 如需任何帮助,请参见以下代码: 公共类合并数组{ public static void main(String[] args) { // T
A[I]
小于B[j]
,然后创建一个数组C[k]
来存储合并数组的新数组,但我的问题是我得到了一个java.lang.ArrayIndexOutOfBoundsException:
如何解决此错误:
最后两个for循环是检查我们是否完成了A和B的比较,一些元素被左移到C。这里我假设A和B是排序的。m和n是数组的大小
如需任何帮助,请参见以下代码:
公共类合并数组{
public static void main(String[] args) {
// TODO Auto-generated method stub
//given two arrays merge them
int a [] = {2,8,15,18,19,20};
int b [] = {5,9,12,17};
System.out.println(Arrays.toString(mergeArrays(a,b,5,3)));
}
private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
// TODO Auto-generated method stub
int i =1;
int j = 1;
int k = 1;
int C [] = new int [1];
while(i <= m && j <= n) {
if(A[i] < B[j]) {
C[k++] = A[i++];
}else {
C[k++] = B[j++];
}
}
for(; i<=m ; i++) {
C[k++] = A[i];
}
for(; j <= n; j++) {
C[k++] = B[j];
}
return C;
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
//给定两个数组,合并它们
int a[]={2,8,15,18,19,20};
int b[]={5,9,12,17};
System.out.println(Arrays.toString(mergeArrays(a,b,5,3));
}
私有静态int[]合并数组(int[]A,int[]B,int m,int n){
//TODO自动生成的方法存根
int i=1;
int j=1;
int k=1;
int C[]=新int[1];
而(i在输入for循环之前,您不会重置计数器
编辑:您还将检查当前计数器是否小于或等于5,例如,这将导致索引越界错误,因为数组从索引0开始。但您还将尝试在括号“A[i++]”内获取递增的索引,这也将超过索引限制
edit2:您的“C[]”也被初始化为[1],这意味着它有以下索引:{0,1}。您将“k”计数器设置为1,但一旦您在“C[]”数组中找到一个索引,您就将k递增:“C[k++]”,现在您正试图获取不存在的索引2。请重写代码。我建议您使用内部计数器,只需使用_array_name.length()来获取数组长度。例如,for(int I=0;I
请在上面的行中提供正确的数组长度。您提供的数组长度为1,而k++/i++值超过了1,因此它提供了ArrayIndexOutOfBoundsException。您有两个错误,我将指出,以便您可以修复它
- 数组“C”大小应等于数组“A”的长度+数组“B”的长度
- 在Java中,数组索引以0开始,以数组长度-1结束
您可以创建这样的类
public static void main(String[] args) {
// TODO Auto-generated method stub
//given two arrays merge them
int a[] = {2, 8, 15, 18, 19, 20};
int b[] = {5, 9, 12, 17};
System.out.println(Arrays.toString(mergeArrays(a, b, a.length, b.length)));
}
private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
int[] C = null;
if (m > n) {
C = A;
for (int i = 0; i < n; i++) {
if (A[i] < B[i]) {
C[i] = B[i];
}
}
} else {
C = B;
for (int i = 0; i < n; i++) {
if (A[i] > B[i]) {
C[i] = A[i];
}
}
}
return C;
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
//给定两个数组,合并它们
INTA[]={2,8,15,18,19,20};
int b[]={5,9,12,17};
System.out.println(Arrays.toString(mergeArrays(a,b,a.length,b.length));
}
私有静态int[]合并数组(int[]A,int[]B,int m,int n){
int[]C=null;
如果(m>n){
C=A;
对于(int i=0;iB[i]){
C[i]=A[i];
}
}
}
返回C;
}
的确是pstz duder,计数器从nada开始。
public static void main(String[] args) {
// TODO Auto-generated method stub
//given two arrays merge them
int a[] = {2, 8, 15, 18, 19, 20};
int b[] = {5, 9, 12, 17};
System.out.println(Arrays.toString(mergeArrays(a, b, a.length, b.length)));
}
private static int[] mergeArrays(int[] A, int[] B, int m, int n) {
int[] C = null;
if (m > n) {
C = A;
for (int i = 0; i < n; i++) {
if (A[i] < B[i]) {
C[i] = B[i];
}
}
} else {
C = B;
for (int i = 0; i < n; i++) {
if (A[i] > B[i]) {
C[i] = A[i];
}
}
}
return C;
}